当前位置: 首页 > 知识库问答 >
问题:

Java中的新手逻辑

林涵映
2023-03-14

我正在从书本上学习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 +".");

我的逻辑是

然后利率被添加到余额中,然后我再次添加利率,这应该会给出不同的利率,因为余额的值在这一点上已经改变了,但它没有,它只是计算读取的数字的利息,而不是更新的余额。

这是为什么呢?

我认为,在项目结束时,余额的价值应该是更新后的价值,因此年利息var应该有效。。,但很明显我有点不对劲。

共有3个答案

茅星华
2023-03-14

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

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 +".");
党博超
2023-03-14

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

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表示货币,请始终使用任意精度的十进制整数或语言中最长的整数,并表示美分的分数)

朱承载
2023-03-14

如果你写了这样的声明

double yearsInterest = (balance / 100) * 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 +".");
 类似资料:
  • 问题内容: 我们需要使用Java进行逻辑回归。我们在Python http://blog.smellthedata.com/2009/06/python- logistic-regression- with-l2.html中 使用了此代码,并且基本上希望在Java中使用相同的代码。我被定向到Weka,但许可是非商业性的。 我发现Omegahat API具有像Scipy这样的BFGS最小化器,但我无

  • 我已经有一段时间没有编程了,我正在努力回到事情的转折点,这就是我已经走了多远。我的问题是,我如何循环第二个问题,这样,如果回答不是肯定的,它会再次问这个问题。我曾尝试在if语句周围放置一个循环,但每当我尝试从用户那里获得另一个响应时,它告诉我无法使用变量response来执行此操作。我觉得这是一个简单的修复,因为我理解循环,但我有一个困难的时候围绕着这个具体的问题我的头,提前谢谢你。

  • 问题内容: 运算符和有什么不一样?和运算符|| ?? 而且&和&& ??有什么区别? 谢谢… 问题答案: 主要区别在于,在表达式中,如果为false,则不会进行计算,而在两者中,无论如何都将进行计算。可以说是“ 短路 ”评估。 同样,对于:如果为true,则不会进行评估,而对于两者而言,则无论如何都将被评估。

  • 嗨,我是编程新手,我们的任务是制作一个刽子手游戏。现在我面临的问题是猜测。程序猜对了一切,并且工作正常。虽然它不会打印出中的字母,或者它会打印出1个字母,但当我猜正确时,上一个字母会被覆盖。 那么,有谁能伸出援助之手呢? 这是我的检查代码: }

  • 问题内容: 编译并在C中运行此代码 输出: 现在对于Java中的相同逻辑 输出: 为什么两种语言的输出都不同,输出是可以理解的,但我无法理解 还有一件事,如果应用前缀运算符,那么两种语言的结果相同,为什么呢? 问题答案: 这是因为在C.看看所调用未定义行为这 从链接: 第二句说:如果将对象写入完整表达式中,则在同一表达式中对对象的任何和所有访问都必须直接参与要写入的值的计算。该规则有效地将法律表达

  • 我试图理解JVM的内存管理方案 考虑A、B两类 从主B B=新B(); 据我所知,类加载器将加载A、B,并分别创建2个对象。是否有任何其他对象将被创建? 另外,我问题的第二部分是,在访问Java Visual VM时,我看到Java NIO包的对象已经创建。有什么方法可以阻止JVM创建与我的项目无关的对象吗?