使用 while 循环比较贷款支付和每月利息 - 逻辑错误

Posted

技术标签:

【中文标题】使用 while 循环比较贷款支付和每月利息 - 逻辑错误【英文标题】:using while loop to compare loan payment with monthly interest - logic error 【发布时间】:2012-01-13 17:54:46 【问题描述】:

我目前正在处理一个 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;
        


【问题讨论】:

【参考方案1】:

我刚刚运行了这个脚本并注意到了您的问题。行:

double monthlyInterestRate = 1 + (annualInterestRate / 12);

应阅读:

double monthlyInterestRate = annualInterestRate / 12;

如果您在其中添加 1,则您的 while 循环将始终评估为 true,因为您将全部贷款金额乘以 1.xx

【讨论】:

【参考方案2】:

我建议尝试将这个问题分解成更小的部分。你在程序中多次重复这个模式:

    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.");

这将使查看所涉及的计算流程变得更加容易。 (而且会让你来这里发现的实际错误更容易发现。)

【讨论】:

很好的建议。我认为我的编程还没有达到那个水平(还没有达到方法),但我会记住这一点,谢谢

以上是关于使用 while 循环比较贷款支付和每月利息 - 逻辑错误的主要内容,如果未能解决你的问题,请参考以下文章

Python笔记-房贷计算(本息和本金,每月还利息和每月还本金)及作图对比

使用带小数的指数 [重复]

等额本息贷款每月还款金额推导过程

等额本息贷款每月还款金额推导过程

等额本息贷款每月还款金额推导过程

使用 Foreach 循环的问题