假设我有一个方法要求我循环数据结构,然后返回存储在特定索引中的数字(如果它等于给定数字)。如果数据结构中的两个数字相等,那么它将返回第一个数字。
public static int method(int value, List<Integer> list){
for (Integer i: list){
if (i == value){
return i;
}
}
}
这是一个有问题的解决方案,因为该方法可能不一定返回。我想你可以创建一个变量来存储对等价值的引用并返回它,因此编译器不会发出关于缺少return语句的错误,但这将是毫无意义的代码。
有更好的方法吗?在返回对象的情况下,您只返回0,还是返回null?
答案 0 :(得分:2)
如果没有找到预期和正常的值,则返回-1表示&#34;未找到&#34;,因为正常返回是数组索引。
但是,如果运行循环到完成真的是异常和意外,那么抛出异常,不要返回魔术值。
public static int method(int value, List<Integer> list){
for (int j = 0; j < list.size(); j++) {
Integer i = list.get(j);
if (i == value){
return j;
}
}
throw new IllegalStateException("The method 'SomeClass.method' reach an invalid termination point");
}
答案 1 :(得分:1)
我假设这是一个理论问题,否则你真的只会返回true
(它在列表中)或false
(它不在列表中)。您已经知道要搜索的号码,因此查找并返回它不会为调用代码增加任何值。事实上,对于这种情况,您只需使用Collection
的{{3}}中的public boolean contains(O o)
,并避免编写自己的方法。
public static boolean method(int value, List<Integer> list) {
for (Integer i: list)
if (i == value) return true;
return false;
}
因此,考虑到这个学术问题,为什么不在列表中返回所需数字的索引,如果列表中的数字与您想要的数字不匹配,则返回-1
。
public static int method(int value, List<Integer> list) {
for (int j = 0; j < list.size(); j++) {
Integer i = list.get(j);
if (i == value){
return j;
}
}
return -1;
}
这样你就不必定义特殊情况&#34;返回值,执行自动装箱以返回null
,或定义一个新的构造以同时携带数字和成功&#34;标志。
答案 2 :(得分:1)
查看Collection.contains()
和List.indexOf()
。他们处理这两种情况的方式对于Java来说非常惯用,并且Java开发人员会立即熟悉它。