2013-11-10 3 views
0

Я пытаюсь выполнить расчет снежного кома за долгами - для тех, кто не знает - вы делаете минимальные платежи по всем кредитам из месяца в месяц. Как только вы окупитесь, вы берете этот минимальный платеж и добавляете его к следующему - так далее и т. Д. У меня есть каждый из моих сумм долга на do while loops, но мой экран становится черным, и я считаю, что он находится в бесконечном цикле. У меня есть 10 всего этого, но здесь несколько раз, чтобы показать, как это работает:while цикл не останавливается при выполнении критериев

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 (при условии, что он не является нулевым).

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

Я также попытался петли, как

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

и что не получилось - тот же эффект.

Любые предложения о том, как заставить это не зацикливаться навсегда?

всех типов данных являются двойными (кроме tempTimeTaken это целый) - начальные значения изменяются - они вводятся в различной активности и проводили к этому с помощью sharedpref значения по умолчанию 0

+0

добавить тип данных и начальные значения для rate1 количество1 количество2 и т.д. сделать программу полной, так что будет проще отлаживать –

+0

видеть обновленные типы выше – jpgerb

+0

Это работает, если '' rate' и newPmt' имеют разумные значения. Можете ли вы указать точные значения, которые вы использовали? Кроме того, вы можете попытаться выполнить шаги выполнения цикла цикла, а затем использовать 'logcat' для их проверки. По крайней мере, вы сможете подтвердить, что он работает бесконечно. –

ответ

1

В общем формате в то время как петля

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

в цикле

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

вы присваиваете новое значение счетчика контура количество1 и приращение в tempTimeTaken. Распечатайте значение amount1 в этом цикле, проверьте, становится ли он отрицательным в некоторый момент времени, например.

while(amount1>0){ 
    amount1 = (amount1 * rate1) - newPmt; 
    Log.d("loop","Value of amount1 :"+amount1); 
    tempTimeTaken++; 
} 
Смежные вопросы