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 方法中出现错误输出。
我是编程新手,所以如果这是一个新手问题,我很抱歉,任何帮助将不胜感激。
(A) 和 (B) 实际上只是同一个问题。:-)
当找不到匹配项时,您需要在循环之后执行以下两件事之一的代码:
抛出异常,或
退货 null
...或者返回一个Optional如在他的回答安德烈亚斯告诉您。
null如果找不到匹配项是常见且正常的,则返回是标准的。如果找不到匹配项是不寻常和意外的,则抛出异常是标准的。
关于该代码的一些其他说明:
不要==用来比较字符串,使用equals; 细节
我假设Products是实例变量(字段)或静态变量。如果是这样,它不应该最初被封顶。标准 Java 命名约定实例和静态变量以小写字母开头。
IfProducts是一个实例变量,我强烈建议使用this.它来访问它(this.Products,而不仅仅是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;
}
Run Code Online (Sandbox Code Playgroud)