使用 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 循环比较贷款支付和每月利息 - 逻辑错误的主要内容,如果未能解决你的问题,请参考以下文章