Java:if语句返回的样式问题?

时间:2015-02-21 00:22:02

标签: java loops if-statement for-loop return

假设我有一个方法要求我循环数据结构,然后返回存储在特定索引中的数字(如果它等于给定数字)。如果数据结构中的两个数字相等,那么它将返回第一个数字。

public static int method(int value, List<Integer> list){
    for (Integer i: list){
        if (i == value){
            return i;
        }
    }
}

这是一个有问题的解决方案,因为该方法可能不一定返回。我想你可以创建一个变量来存储对等价值的引用并返回它,因此编译器不会发出关于缺少return语句的错误,但这将是毫无意义的代码。

有更好的方法吗?在返回对象的情况下,您只返回0,还是返回null?

3 个答案:

答案 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开发人员会立即熟悉它。