Java中的新手逻辑

时间:2013-12-08 11:26:14

标签: java logic

我正在从书籍中学习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然后再乘以利率。 然后加息来平衡 然后我再次加息,这应该给出不同的利率,看到此时余额的价值发生了变化,但事实并非如此,它只计算对读入数量的兴趣而不是更新的余额

为什么会这样?

我认为在程序结束时,余额的价值应该是更新的值,所以年份利息变量应该有效..但显然我遇到了错误。

3 个答案:

答案 0 :(得分:2)

如果你写一个像

这样的陈述
double yearsInterest = (balance / 100) * interest;

你没有定义数学意义上的兴趣意味着什么。您实际执行的操作是使用balanceinterest当前引用的值计算兴趣。如果你想定义它,只需添加一个方法

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