找不到对象时如何处理返回值

Ini*_*tes 1 java methods object find

我在这里有以下一段代码,它旨在查找并返回一个产品对象,使用字符串输入与所有产品的名称进行比较。

public Product find(String input){

    for(int i = 0; i <Products.size();i++)
    {
         if(input ==Products.get(i).getName()){

         return Products.get(i);
        }   
    }   
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题。

A) 返回值在 IF 语句内,所以主方法 find() 没有返回值。因此我收到一条关于此的错误消息。

B)如果用户输入不存在的产品名称,则不会找到任何产品,其中不应返回任何内容,但我不确定如何执行此操作。结果当前正在用于移除产品,因此如果它传递要移除的空产品对象,这可能会导致 remove 方法中出现错误输出。

我是编程新手,所以如果这是一个新手问题,我很抱歉,任何帮助将不胜感激。

T.J*_*der 5

(A) 和 (B) 实际上只是同一个问题。:-)

当找不到匹配项时,您需要在循环之后执行以下两件事之一的代码:

  1. 抛出异常,或

  2. 退货 null

...或者返回一个Optional在他的回答安德烈亚斯告诉您

null如果找不到匹配项是常见且正常的,则返回是标准的。如果找不到匹配项是不寻常和意外的,则抛出异常是标准的。


关于该代码的一些其他说明:

  1. 不要==用来比较字符串,使用equals; 细节

  2. 我假设Products是实例变量(字段)或静态变量。如果是这样,它不应该最初被封顶。标准 Java 命名约定实例和静态变量以小写字母开头。

  3. IfProducts是一个实例变量,我强烈建议使用this.它来访问它(this.Products,而不仅仅是Products),尽管这是一个风格问题;Java确实允许您将其关闭。

  4. 如果Products是一个数组或一个List(给定size()方法,它看起来像一个列表),你可能最好使用增强for循环。

  5. 不鼓励过度使用空行。再次,只是风格问题。:-)

  6. 最好与您放置的大括号 ( {})保持一致(在行尾,或在下一行单独放置,但不能在同一代码中同时放置)。:-)

考虑到以上所有因素,假设Products是一个实例变量:

public Product find(String input) {
    for (Product product : this.products) {
        if (input.equals(product.getName())) {
            return product;
        }   
    }   
    return null;
}
Run Code Online (Sandbox Code Playgroud)