[英]Novice logic in Java
我正在从书本中学习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,然后再乘以利率来定义利息。 然后将利率添加到余额中,然后再次添加利率,这应该给出不同的利率,因为此时余额的值已更改,但实际上并没有,它只是计算读入而不是更新后的余额。
为什么是这样?
我以为,到程序结束时,余额的值应该是更新的值,以便年利率var应该可以工作..但是,显然我弄错了。
如果你写一个像
double yearsInterest = (balance / 100) * interest;
您没有从数学意义上定义兴趣的含义。 您实际要做的是使用当前由balance
和interest
引用的值来计算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 +".");
您需要重新计算第二年的利息,例如:
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,请始终使用任意精度的十进制整数或您的语言具有的最长整数,并且代表分的小数)
第一年后,您没有根据更新后的余额重新计算利息:
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 +".");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.