为什么它给我一个返回丢失错误?
为什么这个方法一直告诉我它缺少 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 示例中,人们可以正式证明一个语句是不可到达的,但规则却说它是可到达的,并强制出现编译错误。
(所以在你的例子中,编译器不需要推断你的代码没有考虑零长度字符串。这是“人类水平”的推理。)