2017-12-03 14 views
0

関数 'spd'は、整数yの最小の素数を見つけるために使用されます。私は、コードを実行すると しかし、関係なく、「Y」の値が何であるか、戻り値は常に0if文が常にfalseを返すのはなぜですか? (戻り値は常に0です)

public static BigInteger spd (int y) { 

    ArrayList<BigInteger> primes = new ArrayList<BigInteger>(); 

    int retval; 
    int Nth_prime = 10000; 
    BigInteger getn; 
    BigInteger y2 = BigInteger.valueOf(y); 
    BigInteger TWO = new BigInteger("2"); 
    BigInteger bi = new BigInteger("1"); 

    primes.add(TWO); 

    int i = 1; 

    while (i < Nth_prime) { 
     bi = bi.add(TWO); 
     if (bi.isProbablePrime(40)) { 
      i++; 
      primes.add(bi); 
     } 
    } 

    BigInteger zero = new BigInteger ("0"); 
    BigInteger ret; 
    BigInteger one = new BigInteger ("1"); 

    for (int n = 0; n < y2.intValue(); n++) { 
     if (y2.mod(primes.get(n)).equals(zero)) { 
      retval = primes.get(n).intValue(); 
     } 
    } 

    BigInteger returning = BigInteger.valueOf(retval); 

    return returning; 
} 
+4

変数 'retval'が初期化されていないため、そのコードはコンパイルされません。 – Ele

+0

'y = 500'を渡し、戻り値が' 5'のコードを実行しました(変数 'retval = 0'を初期化しました)。 – Ele

答えて

1

これは、初期化とし、いくつかのリファクタリングとコードではありません。

public static BigInteger spd(int y) { 

    ArrayList<BigInteger> primes = new ArrayList<BigInteger>(); 

    int retval = 0; 
    int Nth_prime = 10000; 
    BigInteger y2 = BigInteger.valueOf(y); 
    BigInteger TWO = new BigInteger("2"); 
    BigInteger bi = new BigInteger("1"); 

    primes.add(TWO); 

    int i = 1; 

    while (i < Nth_prime) { 
     bi = bi.add(TWO); 
     if (bi.isProbablePrime(40)) { 
      i++; 
      primes.add(bi); 
     } 
    } 

    BigInteger zero = new BigInteger("0"); 

    for (int n = 0; n < y2.intValue(); n++) { 
     if (y2.mod(primes.get(n)).equals(zero)) { 
      retval = primes.get(n).intValue(); 
     } 
    } 

    return BigInteger.valueOf(retval); 
} 
関連する問題