2016-04-19 12 views
1

1.私の下のコードの5行目は、変数が必要ですが値が見つかったところで予期しない型エラーを返します。 2.番号は、nがPrimeであるか、whileループを使用していないかをチェックするためのコードです。予期しないタイプのエラーを避けるために、以下のコードを変更するにはどうすればよいですか(variable:found:value)?

public boolean primeNumberCheck(int n) 
{ 
    int divisionNumber = 2; 
    boolean primeCheck = true; 
    while (divisionNumber < n) 
    { 
     if (n%divisionNumber = 0) 
     { 
      primeCheck = true; 
      divisionNumber = n; 
     } 
     else 
     { 
      primeCheck = false; 
     } 
     divisionNumber++; 
    } 
    return primeCheck; 
} 
+1

「n%divisionNumber = 0」を「n%divisionNumber == 0」に変更します。 – Eran

+0

ああ。それはありがとう!私は今それを変更します。 – ADralph

+0

whileループを中断させるには、 'divisionNumber = n;'を実行していると思います。あなたはそれをはるかに明確な 'break;'ステートメントに置き換えることができます。 –

答えて

0

=は代入演算子です。 n%divisionNumberは値を返し、別の値に値を代入することはできません。だからあなたはそのエラーを取得します。

==演算子を使用して値を比較する必要があります。だから、あなたがすべき:私は別に答えからこのコード

+0

ありがとう!私はちょうど間違って私の真実と偽の場所の周りを交換したことを知った。 – ADralph

0

をこれが答え、Primality test on WikiPedia

public boolean primeNumberCheck(int n) { 
    // exclude numbers with divisor 2 or 3 
    if (n % 2 == 0) { 
     return false; 
    } 
    if (n % 3 == 0) { 
     return false; 
    } 
    // all integers can be expressed as (6k + i) for some integer k and 
    // for i = −1, 0, 1, 2, 3, or 4; 
    // 2 divides (6k + 0), (6k + 2), (6k + 4); and 3 divides (6k + 3). 
    // so we only have to test numbers of the form 6k +- 1 
    int k = 1; 
    int i = -1; 
    // we only need to check candidates up to SQRT(n) 
    double sqrtN = Math.Sqrt(n); 
    int candidateDivisor = getCandidateDivisor(k, i); 
    while (candidateDivisor < sqrtN) {   
     if (n % candidateDivisor == 0) { 
      return false; 
     } 
     // flip i between -1 and 1 
     i = -i;  
     // when i flips back to -1, increment k 
     if (i < 0) {   
      k++; 
     } 
     candidateDivisor = getCandidateDivisor(k, i); 
    } 
    return true; 
} 

private int getCandidateDivisor(k, i) { 
    return (6 * k) + i; 
} 

免責事項に基づいて、単により最適化されたアルゴリズムではありませんここで、私が従うもう1つのヒントは、次のようにしています:if(n%divi(0%)div0 sionNumber = 0)。

これは私が1つの "="記号を見落としていないことを保証します。

+0

私はそれに沿ってこのようなことができます。しかし、これはどのようにコードを最適化しますか?私と比較してどのような穴が避けられますか?それはチェックする数字が少ないので、コードが大きいほど速く実行されますか? – ADralph

+0

それはより速く動く、私が参照したWikipediaの記事を見てください。 –

0

をテストしていません:

if (n%divisionNumber == 0) 
+0

ありがとうございました!!! – ADralph

関連する問題