4

我不明白 Method isPrime 末尾的“返回”值,它的值是 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?

4

4 回答 4

1

它默认返回true。因此,如果它完成循环,检查所有数字是否可除,并发现没有一个可以除它,它返回 true。它的编写方式是,如果您的方法找到任何除以您的参数的数字,您的方法将返回 false,并且仅当它检查所有要检查的数字并且没有找到除以余数为零的参数时才返回 true。

用布尔返回类型声明的方法必须总是返回一些东西,该方法不能简单地结束而不返回任何东西。

注意:您不必检查 X 之后的每个数字的可除性来查看 x 是否为素数。您只需要检查并包括 X 的平方根,请参阅此内容以供参考:为什么我们要检查素数的平方根以确定它是否为素数?

于 2013-07-11T18:54:15.127 回答
1

isPrime函数假定数字是素数。循环正在寻找一个可以反驳这个假设的反例。如果没有找到反例,则循环结束,函数返回true

这在逻辑上被称为反证法。在大多数结果将是false(例如,因为大多数数字不是素数)的情况下,它被认为是一种良好的编程实践,因为它会导致算法失败并尽快返回,从而获得更好的性能。

于 2013-07-11T19:16:52.400 回答
0

基本上,这让程序员在这种情况下可以自由地简化代码。

如果在循环内,(n % i == 0)计算结果为真,则采用 if 语句。false返回并且方法停止。

或者,如果该表达式从不为真,则退出循环,并返回真。

在可以有条件地返回某些内容的代码的末尾放置 return 有助于清理初始条件并避免编译器警告或错误。

于 2013-07-11T18:56:02.017 回答
0

他是对的,但如果你想检查这个数字是否是质数,你只需要检查到 n/2 !

于 2013-07-11T18:56:27.163 回答