1

メソッドの先頭に次のコードがあります。

BigInteger foo = BigInteger.valueOf(0);
BigInteger triNum = BigInteger.valueOf(0);

//set min value to 1*2*3*4*5*...*199*200.
BigInteger min = BigInteger.ONE;
BigInteger temp = BigInteger.ZERO;
for(int i=1; i<=200; i++)
{
    temp = BigInteger.valueOf(i);
    min = min.multiply(temp);
}
System.out.println(min);

while(triNum.compareTo(min) <= 0)
{
    foo.add(BigInteger.ONE);
    triNum = triNum.add(foo);
    System.out.println("triNum: "+triNum);
}

これは、minを値(1 * 2 * 3 * ... * 199 * 200)にロードしてから、triNumをminより大きい値を持つ最初の*三角数**に設定することになっています。

問題は、メソッドを実行すると、画面を下にスクロールするたびに「triNum:0」のリストが表示されたターミナルウィンドウだけが表示されることです...コードに何も表示されません(完全に可能ですが、作成しました)いくつかの間違いがあり、私はmath.BigIntegerに少し慣れていません)、これはBigIntegerクラスを指しているようです。誰かが私のコードにバグを見ますか?

.................................................。 .................................................。 .....................。

*三角数は、1 + 2 + 3 + 4 + 5 + 6 + 7+..が到達できる数です。

4

3 に答える 3

9

見る

foo.add(BigInteger.ONE);

これは更新されfooますか?foo+ BigInteger.ONEそれとも、再び使用されないものと等しいオブジェクトを作成しますか?

于 2009-10-20T01:51:36.117 に答える
4

fooは常に0です。次の行を変更する必要があります。

foo.add(BigInteger.ONE);

これに:

foo = foo.add(BigInteger.ONE);
于 2009-10-20T01:52:26.613 に答える
3
 foo.add(BigInteger.ONE);

BigIntegerは不変であるため、結果をfooに再度割り当てる必要があります。

 foo = foo.add(BigInteger.ONE);
于 2009-10-20T01:53:18.747 に答える