【问题标题】:Novice logic in JavaJava中的新手逻辑
【发布时间】:2013-12-08 11:26:13
【问题描述】:

我正在从书本上学习 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,然后乘以利率。 然后将利率添加到余额中 然后我再次添加利率,这应该给出不同的利率,因为此时余额的值已经改变,但它没有,它只是计算读取的数字的利息而不是更新的余额.

这是为什么?

我认为到程序结束时 balance 的值应该是更新后的值,所以 years interest var 应该起作用..,但显然我弄错了。

【问题讨论】:

  • 如果您不是特别想避免使用 Java 标准库 Math 函数,您也可以通过简单地执行 balance *= Math.pow(interestRate, years) 来计算利息(其中 interestRate 是年利率,对于例如,1.02 代表 2% 的利息,years 是您想要累积利息的年限)。

标签: java logic


【解决方案1】:

如果你写一个像

这样的语句
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 +".");

【讨论】:

    【解决方案2】:

    您需要重新计算第二年的利息,例如像这样:

    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 学习后:以后不要使用浮点数/双精度数,始终使用任意精度的十进制整数或您的语言具有的最长整数并表示美分的分数)

    【讨论】:

      【解决方案3】:

      在第一年之后,您没有根据更新后的余额重新计算利息:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-14
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        • 2012-03-01
        相关资源
        最近更新 更多