2012-05-12 12 views
1

これは素数を見つけるのに最高でも効率的な方法でもないことを知っています。しかし、169が素数である理由を見つけることはできません。このコードで何が問題になっていますか?素数番号

public static int checkPrime(int num, int i) 
{ 
    if (i == num) 
     return 1; 

    else 
    { 
     if (num % i == 0) 
      return 0; 
     else 
      checkPrime(num, i+1); 

    } 

    return 1; 
} 

メインクラス:

 System.out.println("Type a number"); 
     number = reader.nextInt(); 

     if ((number % 10) % 2 == 0) 
      result = 0; 

     else 
      result = checkPrime(number, 2); 

     if (result == 1 || number == 2) 
      System.out.println(number + " is a prime number"); 
     else 
      System.out.println(number + " is NOT a prime number"); 
+2

なぜ、 'bool'の代わりに' int'を返すのですか? – CodesInChaos

+7

また、再帰呼び出しの戻り値も無視します。 – CodesInChaos

+0

いくつかの数字が素数であることを確認している場合、なぜ他の数字もチェックしていますか? 'if(number%divider == 0)... 'と言ってください。 – MikkoP

答えて

6

がより良い表現のためbooleanintを交換し、再帰呼び出しの値を返す、あなたのメソッドは次のようになります。

public static boolean checkPrime(int num, int i) 
{ 
    if (i == num) 
     return true;  
    else 
    { 
     if (num % i == 0) 
      return false; 
     else 
      return checkPrime(num, i+1); 
    } 
} 

それはまだdoesnのnum < 2の場合、iがオーバーフローするまで実行されます。だからあなたのメインプライムチェック機能として、あなたのような何かを書くことができます。

public static boolean checkPrime(int num) 
{ 
    if(num<2) 
    return false; 
    else 
    return checkPrime(num, 2); 
} 

ところで(number % 10) % 2number % 2に相当します。

+0

+1は数秒で私にそれを打ちました – Bohemian

+0

速い応答のためにありがとう:p – amiregelz

+1

FYI、Javaでそれは 'ブールです。 – st0le

関連する問題