我是 Java 的新手,正在尝试解决初学者在给定数字之后找到下一个素数的问题。以下是我提出的解决方案的两个版本。对于第一个版本,编译器要求我在 findNextNumber 方法的末尾包含第二个 return 语句(即 return 0;),尽管我已经在代码中包含了一个 return 语句,而第二个版本没有要求我包含一个额外的返回声明。有人可以告诉我为什么会这样吗?在此先感谢您的帮助!
public static int findNextPrime(int num) {
// VERSION 1
// boolean isPrime = false;
// while(!isPrime){
// num += 1;
// int sqt = (int)Math.sqrt(num);
// for(int i = 2; i <= sqt; i++){
// if(num % i == 0){
// break;
// } else {
// isPrime = true;
// return num;
// }
// }
// }
// return 0;
// VERSION 2
// while (true) {
// boolean isPrime = true;
// num += 1;
// int sqt = (int) Math.sqrt(num);
// for (int i = 2; i <= sqt; i++) {
// if (num % i == 0) {
// isPrime = false;
// break;
// }
// }
// if (isPrime) {
// return num;
// }
// }
}
最佳答案
在第二个版本中,编译器知道 while(true) {...}
只能通过您的 return 语句退出。
在第一个版本中,编译器发现条件不是常量,并假设 while(!isPrime) {...}
可能会退出循环,因为 isPrime
为真。你我都知道这不可能发生,但语言不会让你依赖它来省略 return 语句。
将 while(!isPrime)
更改为 while(true)
或 for(;;)
如果您确定 isPrime
在那里总是假的。
关于java - 编译器要求我包含一个 return 语句,即使我已经包含了一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34913852/