我这里有以下代码,它旨在查找并返回产品对象,使用字符串输入与所有产品的名称进行比较。
public Product find(String input){
for(int i = 0; i <Products.size();i++)
{
if(input ==Products.get(i).getName()){
return Products.get(i);
}
}
}
我有两个问题。
A) 返回值位于 IF 语句内部,因此 main 方法 find() 没有返回值。因此我收到了一条关于此问题的错误消息。
B) 如果用户输入不存在的产品名称,则不会找到任何产品, 它不应该返回任何东西,但我不知道该怎么做。目前结果正在 用于删除产品,因此如果它传递要删除的空产品对象,则可能会导致删除方法中出现错误输出。
我是编程新手,所以如果这是一个新手问题,我很抱歉,任何帮助将不胜感激。
最佳答案
(A)和(B)实际上是同一个问题。 :-)
您需要在循环后添加代码,以便在未找到匹配项时执行以下两件事之一:
引发异常,或者
返回
null
...或返回一个可选
作为Andreas shows you in his answer .
如果找不到匹配项是常见且正常的情况,则返回 null
是标准的。如果未找到匹配项是不寻常且意外的情况,则抛出异常是标准做法。
关于该代码的其他一些注释:
不要使用
==
来比较字符串,使用equals
; details我假设
Products
是实例变量(字段)或静态变量。如果是这样,则最初不应对其进行限制。标准 Java 命名约定的实例和静态变量以小写字母开头。如果
Products
是一个实例变量,我强烈建议使用this.
来访问它(this.Products
,而不仅仅是产品
),尽管这是风格问题; Java确实允许您放弃它。如果
Products
是一个数组或List
(给定size()
方法,它看起来像一个列表),您可能最好使用增强的for
循环。不鼓励过多使用空行。再说一次,这只是风格问题。 :-)
最好与花括号 (
{}
) 的位置保持一致(位于行尾,或单独位于下一行,但不能同时出现在行中)相同的代码)。 :-)
考虑到上述所有因素,假设 Products
是一个实例变量:
public Product find(String input) {
for (Product product : this.products) {
if (input.equals(product.getName())) {
return product;
}
}
return null;
}
关于java - 没有找到对象时如何处理返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59757011/