2013-11-10 106 views
0

我正在嘗試爲債務做一個滾雪球計算 - 對於那些不知道的人 - 您每個月都會對所有貸款進行最低支付。一旦有人獲得了回報,您將獲得最低的付款並將其添加到下一個 - 等等。我有我的每個債務金額在做while循環,但我的屏幕變黑,我相信它是在一個無限循環。我有10個總這些,但這裏有一些只是爲了展示它是如何工作的:雖然在滿足標準時循環不停止

int tempTimeTaken=0; 
    double newPmt = payment1 + aAmt; 

    while(amount1>0){ 
     amount1 = (amount1 * rate1) - newPmt; 
     tempTimeTaken++; 
    } 

    newPmt = newPmt + payment2; 
    for (int i=0;i<tempTimeTaken;i++) 
    { 
     if(amount2>0){ 
     amount2 = (amount2 * rate2) - payment2; 
     } 
    } 
    do{ 
     if (amount2>0){ 
     amount2 = (amount2 * rate2) - newPmt; 
     tempTimeTaken++;} 
    }while(amount2>0); 

這裏每一個未初始化的變量,從早期的活動sharedpreference進行檢索。一旦收到,它被解析爲一個double(假設它不是null)。

try 
    { 
     amount2 = Double.parseDouble(debtAmount2); 
    } 
    catch (Exception e) 
    { 
     amount2 = 0; 
    } 

我也試過環爲

while (amount>0){ 
//do stuff 
} 

,但這並沒有工作,要麼 - 同樣的效果。

有關如何讓它不會永久循環的任何建議?

所有數據類型是雙(除了tempTimeTaken爲int) - 初始值變化 - 它們是在不同的活動的輸入和經由sharedpref具有0

+0

添加數據類型和速率1 amount1 AMOUNT2等初始值,使程序完整,因此會更容易調試 –

+0

看到更新的類型 – jpgerb

+0

上面這個作品,如果'rate'和'newPmt'有合理的值。你能提供你使用的確切值嗎?此外,您可以嘗試記錄循環執行步驟,然後使用'logcat'來檢查它們。至少你可以確認它無限循環。 –

回答

1

通常的while循環的格式的默認攜帶到這一個

while(check condition against loop counter){ 
    //do your things 
    increment/ decrement loop counter 
} 

在循環

while(amount1>0){ 
    amount1 = (amount1 * rate1) - newPmt; 
    tempTimeTaken++; 
} 

要指定新的價值循環計數器amount1和遞增tempTimeTaken。在此循環中打印amount1的值,檢查它在某個時間點是否爲負值,例如。

while(amount1>0){ 
    amount1 = (amount1 * rate1) - newPmt; 
    Log.d("loop","Value of amount1 :"+amount1); 
    tempTimeTaken++; 
}