java - 缺少返回语句而不抛出新的 IllegalArgumentException

标签 java illegalargumentexception

我正在查看 leetcode 两和代码,并对抛出新的 IllegalArgumentException 语句感到困惑。代码的目标是返回两个数字的索引,以便在给定整数数组的情况下将它们加起来达到特定目标。假设每个输入都有一个解决方案,并且您不能两次使用相同的元素。这是代码:

如果我在没有抛出 new IllegalArgumentException("No two sum solution") 的情况下运行这段代码,它会显示错误消息:

Line 10: error: missing return statement } ^

但是,如果我添加 throw new IllegalArgumentException("No two sum solution"),代码会顺利运行。

我的问题是,由于假定每个输入只有一个解决方案,为什么在这种情况下抛出新的 IllegalArgumentException 很重要。谢谢。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums [j] == target) {
                    return new int[] {i, j};
                }
            }
        }
        throw new IllegalArgumentException("No two sum solution");
    }
}

最佳答案

编译器无法知道您关于只有一种解决方案的假设。

关于语句可达性的规则实际上是非常基本的。特别是,因为存在外循环上的循环保护而不是值为 true 的常量表达式,编译器认为循环体可能永远不会执行。因此,您需要处理这种可能性。

因为该方法是非空的,所以您必须返回一个值或抛出异常。

关于java - 缺少返回语句而不抛出新的 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56758462/

相关文章:

java - 当断点命中时,从更高的堆栈级别查看变量的值,而无需手动爬升堆栈

java - 向 JChart2D 的 ChartPanel 添加弹出菜单项

scala - 有人可以解释为什么在 Scala 中应用这样的 map 会抛出和 IllegalArgumentException 吗?

android - IllegalArgumentException:接收器未注册

java - List.addAll() 什么时候抛出 IllegalStateException?

java - 在 JSP 和 Apache Derby 数据库中连接 Driver Manager 时出现 Classnotfound 异常/如何为普通 Java 应用程序构建数据库连接

java - 在类路径中找不到 Camel 属性文件

java - 从抽象类实现比较器

java - null 参数的 IllegalArgumentException 或 NullPointerException?

java.lang.IllegalArgumentException :at android. view.Surface.unlockCanvasAndPost( native 方法)