2013-11-10 57 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++; 
}