在 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
试图找到具有 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