2015-11-27 163 views
-1

試圖找到bigIntegers的總和與2位集,但它的無限循環使用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

是否有效的內部使用bigintegers for循環或是否有任何其他的方式來實現這似乎功能 – snoopy

+0

我,他們已經回答了這個問題... i.add(BigInteger.ONE)做這個工作???,我增加了嗎?或者也許它不是......檢查你之前發佈的問題...... –

+0

對不起,也許這不是你,或者你刪除了這個問題? –

回答

4

的問題是,BigInteger s是不變的。當你做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 
+0

謝謝你的建議回答我的查詢謝謝 – snoopy