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