繁体   English   中英

Java新手逻辑

[英]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;

您没有从数学意义上定义兴趣的含义。 您实际要做的是使用当前由balanceinterest引用的值来计算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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM