использование цикла while для сравнения платежей по кредиту с ежемесячными процентами - логическая ошибка - PullRequest
2 голосов
/ 06 декабря 2011

В настоящее время я работаю над циклом while, который должен получать следующую информацию из суммы пользовательского кредита, годового процента и ежемесячного платежа. Он должен сравнивать ежемесячный процент с ежемесячным платежом, и, если процент за первый месяц превышает или равен назначенному платежу, открывается диалоговое окно с просьбой увеличить сумму до тех пор, пока ежемесячный платеж не превысит процент.

Похоже, что в некоторых случаях он работает нормально (если я наберу 1000 для ссуды, 12% и любой платеж ниже 121, программа запросит более крупный платеж). Но если я ввожу сумму кредита и ежемесячный платеж, близкие друг к другу (сумма кредита 500, ежемесячный платеж 400), я получаю диалоговое окно с сообщением об ошибке, в котором говорится, что я не ввел достаточно большую сумму. Ха!

Вот мой код, если вы можете посмотреть. Спасибо!

package program6;
import javax.swing.JOptionPane;

public class LoanAmount2 {

    public static void main(String[] args) {
        String loanAmountString = JOptionPane.showInputDialog(null, "Enter the amount for your loan.");
        double loanAmount = Double.parseDouble(loanAmountString);
        String annualInterestString = JOptionPane.showInputDialog(null, "Enter your annual interest rate.");
        double annualInterestRate = Double.parseDouble(annualInterestString);
        annualInterestRate = 1 + (annualInterestRate / 100);
        String monthlyPaymentString = JOptionPane.showInputDialog(null, "Enter the amount for your monthly payment.");
        double monthlyPayment = Double.parseDouble(monthlyPaymentString);
        double monthlyInterestRate = 1 + (annualInterestRate / 12);
        double monthlyInterest = loanAmount * monthlyInterestRate;
        while (monthlyInterest >= monthlyPayment) {
            monthlyPaymentString = JOptionPane.showInputDialog(null, "Your payment only covers the interest on your loan. Please enter a larger amount for your monthly payment.");
            monthlyPayment = Double.parseDouble(monthlyPaymentString);
            break;
        }

}

}

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Я только что запустил этот скрипт и заметил вашу проблему.Строка:

double monthlyInterestRate = 1 + (annualInterestRate / 12);

должна выглядеть следующим образом:

double monthlyInterestRate = annualInterestRate / 12;

Если вы добавите единицу к этому, ваш цикл while всегда будет иметь значение true, поскольку вы умножаете всю сумму кредита на 1.хх

0 голосов
/ 06 декабря 2011

Я бы рекомендовал попытаться разбить эту проблему на более мелкие части.Вы повторяете этот шаблон в программе несколько раз:

    String annualInterestString =
        JOptionPane.showInputDialog(null,
                    "Enter your annual interest rate.");
    double annualInterestRate =
        Double.parseDouble(annualInterestString);

Я думаю, было бы проще прочитать ваш код, если бы вы предоставили метод, подобный следующему:

double prompt_for_number(String prompt) {
    /* show dialog box */
    /* parse string into a Double */
    /* return number */
}

Это позволитВы переписываете свой код, например, так:

loanAmount = prompt_for_number("Enter the amount for your loan.");
annualInterestRate = prompt_for_number("Enter your annual interest rate.");

Это значительно упростит просмотр потока вычислений.(И сделал бы фактическую ошибку, которую вы пришли сюда, чтобы найти это намного легче обнаружить.)

...