4

メソッド 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

このisPrime関数は、数値が素数であると想定しています。ループは、この仮定を反証する反例を探しています。反例が見つからない場合、ループは最後に達し、関数は を返しますtrue

これは論理的には矛盾による証明として知られています。結果のほとんどがfalse(このように、ほとんどの数が素数ではないため) なる場合、アルゴリズムが失敗してできるだけ早く返され、パフォーマンスが向上するため、優れたプログラミング手法と見なされます。

于 2013-07-11T19:16:52.400 に答える
0

基本的に、これにより、この場合、プログラマーはコードを単純化するために自由を得ることができます。

ループ内で(n % i == 0)true と評価された場合、if ステートメントが実行されます。falseが返され、メソッドが停止します。

代わりに、その式が決して true にならない場合、ループは終了し、true が返されます。

条件付きで何かを返すことができるコードの末尾に return を配置すると、初期条件をクリーンアップするのに役立ち、コンパイラの警告やエラーを回避できます。

于 2013-07-11T18:56:02.017 に答える