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

Java:if语句返回的样式问题?,java,loops,if-statement,for-loop,return,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; } } } 公共静态int方法(int

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

public static int method(int value, List<Integer> list){
    for (Integer i: list){
        if (i == value){
            return i;
        }
    }
}
公共静态int方法(int值,列表){
for(整数i:列表){
if(i==值){
返回i;
}
}
}
这是一个有问题的解决方案,因为该方法可能不一定返回。我想您可以创建一个变量来存储对等价值的引用并返回该值,这样编译器就不会发出关于缺少return语句的错误,但这将是毫无意义的代码


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

我假设这是一个理论问题,否则您将只返回
true
(它在列表中)还是
false
(它不在列表中)。您已经知道要搜索的号码,因此查找并返回该号码不会给呼叫代码增加任何值。事实上,在这种情况下,您只需使用from of
Collection
,避免编写自己的方法

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

这样,您就不必定义“特殊情况”返回值,也不必进行自动装箱以返回
null
,也不必定义一个新的构造来携带数字和“成功”标志。

我假设这是一个理论问题,否则您只需返回
true
(它在列表中)或
false
(它不在列表中)。您已经知道要搜索的号码,因此查找并返回该号码不会给呼叫代码增加任何值。事实上,在这种情况下,您只需使用
集合的from,并避免编写自己的方法

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

这样,您就不必定义“特殊情况”返回值,也不必执行自动装箱以返回
null
,也不必定义一个新的构造以同时携带数字和“成功”标志。

如果未找到预期值和正常值,则返回-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;
        }
    }
    throw new IllegalStateException("The method 'SomeClass.method' reach an invalid termination point");
}
公共静态int方法(int值,列表){
对于(int j=0;j
如果未找到预期值和正常值,则返回-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;
        }
    }
    throw new IllegalStateException("The method 'SomeClass.method' reach an invalid termination point");
}
公共静态int方法(int值,列表){
对于(int j=0;j
看看
集合.contains()
列表.indexOf()
。它们处理这两种情况的方式对于Java来说非常习惯,Java开发人员会很快熟悉。

看看
集合.contains()
列表.indexOf())
。它们处理这两种情况的方式对于Java来说非常惯用,Java开发人员会很快熟悉。

@LawrenceDol。OP指出问题的关键在于“这是一个有问题的解决方案,因为方法可能不一定返回”。将签名更改为公共静态可选(int、value、List)如何@贝雷斯福德:我认为代码纯粹是示范性的,不是实际的(但是,谁知道,这些天)。是的,我在发布我之前的评论几秒钟后意识到,所以删除了它。是的,这不是我正在使用的实际代码。这只是一个理论问题。@LawrenceDol。OP陈述了问题中的这一点“这是一个有问题的解决方案,因为该方法可能不一定返回”。将签名更改为publicstaticoptional(int、value、List)怎么样@beresfordt:我假设代码纯粹是示例性的,而不是实际的(但是,现在谁知道呢).是的,我在发布我之前的评论几秒钟后意识到,所以删除了它。是的,这不是我正在使用的实际代码。这只是一个理论问题。