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 回答