4 回答
TA贡献1777条经验 获得超3个赞
在您的初始代码中:
if (div == 1) {
return number;
} else {
number = div;
num = 1;
}
}
万一你总是有错误,你将永远不会达到返回语句。编译器不预测它是否真的会发生,因此它需要在 if 和 else 块中都使用 return 语句。所以它实际上与for循环无关。
TA贡献1757条经验 获得超8个赞
我想不出我的循环不会执行的任何情况
必须以有效的、明确定义的方式编写方法。将其视为帮助编译器的一种形式。
return在编译时检查语句是否存在。如果编译器发现一个可能的执行分支没有以有效的返回语句(或显式抛出的异常)结束,它会遇到错误。阅读更多。
甚至 ...
int method() {
if (true)
return 1;
}
...将无法编译
This method must return a result of type int
TA贡献2065条经验 获得超14个赞
两个建议 1. 最好不要更改您传递的参数(在这种情况下为 number 变量) 2. 尽可能少的 return 语句。
在您的情况下,您可以在 for-lopp 之外声明另一个变量 tempNumber 并分配“数字”。在您返回的 if 条件下,您“中断”。返回函数末尾的数字。这样总是返回数字
public static int getLargestPrime(int number) {
if (number < 2) {
return -1;
}
int tempNumber = number;
for (int num = 2; num <= tempNumber; num++) {
int mod = tempNumber % num;
if (mod == 0) {
int div = tempNumber / num;
if (div == 1) {
break;
} else {
tempNumber = div;
num = 1;
}
}
}
return tempNumber;
}
TA贡献1821条经验 获得超6个赞
https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14
Java 编译器不会在循环中验证您的代码,因此您需要将 return 语句放在所有 fork 中。覆盖测试会警告你,因为你有一个无法访问的代码,所以你需要重新规划你的代码。
注意:您需要检查您的主要测试直到或等于Math.sqrt(number)
,如果大于此 sqrt 而没有分隔符,您可以打破循环并返回number
添加回答
举报