2014-09-21 2 views
0

Итак, я (главный) новичок в java, и я пишу простую программу, которая печатает таблицу ежемесячных платежей по кредиту. У меня есть форматирование, но вычисление вложенных циклов идет по моей голове. Я должен уметь вычитать ежемесячный платеж в размере 50 долларов США и цифру в процентной ставке, которую я запросил у пользователя от первоначального кредита в размере 1000 долларов США.выпуск с вычислением вложенных циклов

Все, что я пробовал до сих пор, либо привело к бесконечному циклу, либо самому самому расчету баланса, который был напечатан на все 12 месяцев.

Это, вероятно, очень очевидный вопрос, но любая обратная связь будет очень признательна! Для петель не очень интуитивно для меня, и, глядя на этот же кусочек кода, я остановил свой прогресс!

(.....) 


//this method prompts the user to enter the annual interest rate and then prints it 
//along with the initial loan, monthly payment, and a simple loan payment table for 
//one year 

private static void simpleLoanPaymentTable() { 
    Scanner CONSOLE = new Scanner(System.in); 
    double annualInterestRate; 
    double initialLoan = 1000.0; 
    double monthlyPayment = 50.0; 

    System.out.println("Please enter the annual interest rate:"); 
    annualInterestRate = CONSOLE.nextDouble(); 
    double percentAnnualRate = (annualInterestRate/100); 
    double percentMonthlyRate = (percentAnnualRate/12); 
    System.out.println(); 
    System.out.println("The initial loan is $1000.0"); 
    System.out.println("The monthly payment is $50.0"); 
    System.out.println("The annual interest rate is " + annualInterestRate + "%"); 
    System.out.println(); 


    System.out.println("Simple Loan Payment Table For One Year"); 
    System.out.println(); 
    System.out.println(" Month Balance"); 


    //create 12 rows for the months 
    for(int row = 1; row <= 12; row++) { 
    //calculate monthly balance 
    for(double i = 0; i <= initialLoan; i++) { 
     i = (initialLoan-monthlyPayment+(initialLoan*percentMonthlyRate)); 
     System.out.println(" " + row + "  " + i); 
    } 
    } 
    System.out.println(); 
} 

ответ

0

Что вы думаете это делает?

for(double i = 0; i <= initialLoan; i++) { 
    i = (initialLoan-monthlyPayment+(initialLoan*percentMonthlyRate)); 
    System.out.println(" " + row + "  " + i); 
} 

Что фактически происходит в том, что вы назначаете одинаковое значение для i снова и снова.

Сядьте с карандашом и бумагой и сделайте расчет кредита вручную. Затем преобразуйте процесс, который вы прошли, в код.

Подсказка: исходя из того, что я думаю, что вы должны делать, внутренний цикл не должен быть петлей for.

+0

Хороший совет, я не знаю, почему я думал, поставив второй цикл упростило бы код, когда он только что в конечном итоге усложнять его. Положив его на бумагу и работая над ней, расчет расчистил путаницу. Спасибо за вашу помощь. – immoraliszt

0

Не меняйте итератор цикла внутри самого цикла for. Он уже меняется на каждую итерацию в верхней части цикла; то, что вам нужно сделать внутри петель, ИСПОЛЬЗУЙТЕ эти итераторы.

Так что в вашем случае, вы говорите

for(int row = 1; row <= 12; row++) { 

что означает начать с ряда = 1, увеличить его на 1 каждую итерацию, и идти до тех пор, пока больше не меньше или равно 12. Тогда вы говорите

for(double i = 0; i <= initialLoan; i++) { 

что означает начать с я = 0, увеличить его на 1 каждую итерацию, и идти до тех пор, пока меньше или равна вашей первоначальной ссуды. Обратите внимание, что что-то еще не складывается: ваш итератор i не должен увеличиваться на 1, пока вы не займетесь первоначальным кредитом (я полагаю), он должен быть итерационным на 1, пока ваш расчетный кредит не получит первоначальный кредит.

Затем в следующих циклах используйте эти два итератора (но не меняйте их), чтобы рассчитать кредит, который вы сейчас находитесь в строке/столбце.

Это решит вашу проблему с бесконечным циклом (если математика по-прежнему не указана), но все же может и не быть ответом, который вы ищете. Спросите себя, каковы ваши «ряды» в этой таблице, которые должны представлять? Каковы столбцы в этой таблице, которые должны представлять? И затем выясните, как вычислить число в таблице, используя (но не изменяя) значение строки (месяц) и значение столбца (i) на любой заданной итерации.

EDIT: Опять же, я мог бы ошибаться в математике, но сам перепутал с ней и понял, что на самом деле у вас нет столбцов в таблице: это только строки (== месяцы). Таким образом, вам нужен только один цикл для повторения по месяцам, а остальное - просто расчет, который нужно выяснить.Проверьте это и посмотреть, если это то, что вы ищете:

double currentLoan = initialLoan; 
for(int row = 1; row <= 12; row++) { 
    //calculate monthly balance 
    currentLoan = (currentLoan-monthlyPayment)*(1+percentMonthlyRate); 
    System.out.println(" " + row + "\t" + currentLoan); 
} 
+0

Ах да! Это редактирование помогло. Я попробовал ваше первоначальное решение и снова получил бесконечный цикл, даже после того, как он возился с ним. Я думаю, что второй для цикла, который я вложил, был просто лишним. Мне придется вернуться и убедиться, что математика верна, но я определенно согласен с вашей логикой. Спасибо за вашу помощь! – immoraliszt

+0

Рад слышать. Обязательно отметьте тему закрытой/принять ответ, чтобы кто-либо, входящий в этот поток позже, не пытался и не отвечал на него. Кроме того, не забудьте избежать целочисленного деления в вашей программе (annualInterestRate/100, percentAnnualRate/12) -> (annualInterestRate/100.0, percentAnnualRate/12.0), потому что они НЕ эквивалентны при использовании целых чисел. – NoseKnowsAll

Смежные вопросы