为什么它给我一个返回丢失错误?

为什么这个方法一直告诉我它缺少 return 语句?如果我删除 else,它会告诉我返回 true 无法访问。在此先感谢您的帮助 !

 public static boolean Digit(String pass){
        for (int i=0; i < pass.length(); i++ ){
            if (!Character.isDigit(pass.charAt(i))) {
                System.out.println("Must contain digits");
                return false;
            }
            else
                return true;
        }
        
    }

回答

为什么这个方法一直告诉我它缺少 return 语句?

因为有一种方法可以到达for循环后的点。考虑pass长度为零的情况。

更一般地说,JLS 14.22 中规定了确定语句(或代码中的点)可达性的规则。简单for循环的相关规则如下:

for当且仅当以下至少一项为真时,基本语句才能正常完成:

  • for语句是可到达,有一个条件表达式,并且条件表达式不是常量表达式(§15.29)与值真。
  • 有一个可到达的 break 语句退出该for语句。

在您的示例中,满足第一个要求。因此,for循环可以正常完成。因此for循环后有一个返回点。因此return,此时需要声明。


请注意,可达性规则不依赖于 Java 编译器是否足够聪明来分析您的应用程序逻辑,并且它们不会让编译器自行决定是否聪明。因此,在 Java 示例中,人们可以正式证明一个语句是不可到达的,但规则却说它是可到达的,并强制出现编译错误。

(所以在你的例子中,编译器不需要推断你的代码没有考虑零长度字符串。这是“人类水平”的推理。)


以上是为什么它给我一个返回丢失错误?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>