我正在从书籍中学习java,我遇到了一个逻辑问题,我知道代码不是那么有效但我想了解问题所以我可以更好地理解Java的工作原理并避免未来更复杂的问题。
我试图编写的程序应该读取账户余额,然后利率在一年零两年后给出余额。
第二年的利率应按第一年的总额计算。
但我的计划只是从第一年到第二年增加了相同数量的利息。因此,在余额为6000且利息为4.25的情况下,第一年我得到6255.0,第二年得到6510.0。我应该在第二年获得6520.83,因为第一年的利息也应该是计算利息。
import acm.program.*;
public class BalanceAndIntrest extends ConsoleProgram {
public void run() {
println("This program calculates intrest.");
double balance = readDouble("Enter your balance here: ");
double intrest = readDouble("Enter your intrest rate here: ");
double yearsIntrest = (balance / 100) * intrest;
balance += yearsIntrest;
println("The balance after a year would be £" + balance +".");
balance += yearsIntrest;
println("The balance after two years would be £" + balance +".");
我的逻辑是
它读取了余额 它读取了兴趣 年利息的定义是将余额除以100然后再乘以利率。 然后加息来平衡 然后我再次加息,这应该给出不同的利率,看到此时余额的价值发生了变化,但事实并非如此,它只计算对读入数量的兴趣而不是更新的余额
为什么会这样?
我认为在程序结束时,余额的价值应该是更新的值,所以年份利息变量应该有效..但显然我遇到了错误。
答案 0 :(得分:2)
如果你写一个像
这样的陈述double yearsInterest = (balance / 100) * interest;
你没有定义数学意义上的兴趣意味着什么。您实际执行的操作是使用balance
和interest
当前引用的值计算兴趣。如果你想定义它,只需添加一个方法
private double calculateInterest(double balance, double interest) {
return (balance / 100) * interest;
}
并像这样使用
balance += calculateInterest(balance, interest);
println("The balance after a year would be £" + balance +".");
balance += calculateInterest(balance, interest);
println("The balance after two years would be £" + balance +".");
答案 1 :(得分:1)
您需要重新计算第二年的利息,例如像这样:
println("This program calculates intrest.");
double balance = readDouble("Enter your balance here: ");
double intrest = readDouble("Enter your intrest rate here: ");
double firstYearIntrest = (balance / 100) * intrest;
balance += firstYearIntrest;
println("The balance after a year would be £" + balance +".");
double secondYearIntrest = (balance / 100) * intrest;
balance += secondYearIntrest;
println("The balance after two years would be £" + balance +".");
(同样,当你学完Java时:后来不要使用float / double来赚钱,总是要么使用任意精度的十进制整数,要么使用你的语言所拥有的最长整数,并代表分数的分数)
答案 2 :(得分:0)
在第一年之后,您没有根据更新的余额重新计算利息:
double balance = readDouble("Enter your balance here: ");
double intrest = readDouble("Enter your intrest rate here: ");
double yearsIntrest = (balance / 100) * intrest;
balance += yearsIntrest;
println("The balance after a year would be £" + balance +".");
// Now the interest must be recomputed, since the balance has changed:
yearsIntrest = (balance / 100) * intrest;
balance += yearsIntrest;
println("The balance after two years would be £" + balance +".");