在for循环中使用BigIntegers进入无限循环

时间:2015-11-27 17:30:22

标签: java biginteger

试图找到具有2个设置位的bigIntegers的总和,但是它的循环无限,使用100%cpu,但使用JDK1.8需要建议

BigInteger bi = new BigInteger("5");   
int sum = 0;
for(BigInteger i=BigInteger.valueOf(1); i.compareTo(bi)<=0 ; i.add(BigInteger.ONE))
{
    //System.out.println("inside loop");
    int k = i.bitCount();
    if(k==2)
    {
        sum.add(i);
    }   
}

1 个答案:

答案 0 :(得分:4)

问题是BigInteger是不可变的。执行i.add(BigInteger.ONE)后,它不会修改i。它只返回一个新的BigInteger值。

相反,您应该将结果分配回i

for(BigInteger i = BigInteger.valueOf(1);
    i.compareTo(bi) <= 0; 
    i = i.add(BigInteger.ONE)){ //Reassigning back to i

您目前正在做的事情类似于这样的循环:

for(int i = 1; i < 5; i + 1) //Same problem, using ints