我不理解Method isPrime末尾的“return”值,它的值为true。
public class PrimeNumber extends ConsoleProgram{
public void run(){
int number = readInt("Enter number: ");
if(isPrime(number)){
println( number + " is prime number");
}else{
println(number + " is not a prime number");
};
}
private boolean isPrime(int n){
for(int i=2;i<n;i++){
if (n % i == 0) {
return false;
}
}
return true;
}
当它找到分隔符时它返回false,但我不知道为什么在循环之外它返回true?
答案 0 :(得分:1)
默认返回true。因此,如果它完成循环,遍历检查可除性的所有数字,并发现没有除以它,则返回true。它是以一种方式编写的,如果它找到任何数字来划分你的参数,你的方法将返回false,并且只有当它检查它想要检查的所有数字并且发现没有将参数除以余数为零时才返回true。
使用布尔返回类型声明的方法必须始终返回一些东西,该方法不能简单地结束而不返回任何内容。
注意:您不必检查除了X之后的每一个数字是否为divisibilty以查看x是否为素数。您只需要检查并包括X的平方根,请参阅此参考:Why do we check up to the square root of a prime number to determine if it is prime?
答案 1 :(得分:1)
isPrime
函数假设数字为素数。循环正在寻找反驳这一假设的反例。如果没有找到反例,则循环到达其结尾,函数返回true
。
这在逻辑上称为proof by contradiction。在大多数结果为false
的情况下(例如,由于大多数数字不是素数),它被认为是一种很好的编程实践,因为它会导致算法失败并尽快返回,从而导致在更好的表现。
答案 2 :(得分:0)
基本上,这可以让程序员在这种情况下对代码的简化采取一些自由。
如果在循环内,(n % i == 0)
的计算结果为true,则采用if语句。返回false
,方法停止。
在替代方案中,如果该表达式永远不为真,则退出循环,并返回true。
在一段代码的末尾放置一个返回值可以有条件地返回一些内容,这有助于清理初始条件并避免编译器警告或错误。
答案 3 :(得分:0)
他是对的,但是如果你想检查这个数字是否是一个主要数字,你只需要检查n / 2!