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

using BigIntegers inside for loop goes into infinite loop

试图找到具有 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);
    }   
}

问题是 BigInteger 是不可变的。当您执行 i.add(BigInteger.ONE) 时,它不会修改 i。它只是 returns 一个新的 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