【问题标题】:Java: Style issue for if statement returns?Java:if 语句返回的样式问题?
【发布时间】:2015-04-22 19:28:37
【问题描述】:

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

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

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

有没有更好的方法来做到这一点?在返回对象的情况下,是只返回 0 还是返回 null?

【问题讨论】:

  • @LawrenceDol。 OP 在问题“这是一个有问题的解决方案,因为该方法可能不一定返回”中指出了这一点。
  • 如何将签名改为public static Optional (int, value, List list)
  • @beresfordt:我认为代码纯粹是示范性的,而不是实际的(但是,谁知道,这些天)。
  • 是的,我在发布之前的评论后几秒钟就意识到了,所以删除了它
  • 是的,这不是我正在使用的实际代码。这只是一个理论问题。

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


【解决方案1】:

如果没有找到预期的值且正常,则返回 -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");
}

【讨论】:

    【解决方案2】:

    我假设这是一个理论问题,否则你真的只会返回true(它在列表中)或false(它不在列表中)。您已经知道要搜索的号码,因此找到并返回它不会给调用代码增加任何价值。实际上,对于这种情况,您只需使用 Lists implementation 中的 public boolean contains(O o)Collection,并避免编写自己的方法。

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

    所以鉴于这个学术问题,为什么不返回列表中您想要的数字的index,如果列表中没有与您想要的数字匹配,则返回-1。 p>

     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;
    }
    

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

    【讨论】:

      【解决方案3】:

      看看Collection.contains()List.indexOf()。他们处理这两种情况的方式对于 Java 来说是非常惯用的,Java 开发人员会立即熟悉。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-25
        • 2023-02-04
        • 1970-01-01
        • 2022-12-03
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多