0

BigInteger に別の BigInteger を追加するのに問題があります。関連するコード:

クラスで宣言:

private BigInteger mTotientSum; 

コンストラクターで実行:

BigInteger mTotientSum = BigInteger.ZERO;

相対法では:

  BigInteger totientMultiplier = BigInteger.valueOf(mTotientMulitplier);
  for (long i = 1; i <= mMaxNum; i++)
  {
     BigInteger j = BigInteger.valueOf(i);
     System.out.println(j.toString());
     BigInteger num = j.multiply(totientMultiplier);
     System.out.println(num.toString());
     BigInteger totient = calculateTotient(num);
     System.out.println(totient);
     mTotientSum = mTotientSum.add(totient); //This is line 113
     System.out.println("Sum at" + i + " = " + mTotientSum.toString());
  }

私が得る出力は次のとおりです。

1
510510
17
16
16
Exception in thread "main" java.lang.NullPointerException
          at Totient.run(Totient.java:113) (Note that line 113 is noted above.)
      at Totient.main(Totient.java:131)
4

1 に答える 1

2

コンストラクターで変数をシャドウイングしています。電話することで

BigInteger mTotientSum = BigInteger.ZERO;

ローカルの mTotientSum 変数のみを初期化し、クラス フィールドを null のままにしています。

コンストラクターで変数を再宣言しないでください。代わりに次のようにします。

mTotientSum = BigInteger.ZERO;

違いを見ます?

于 2013-06-16T23:15:32.097 に答える