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

Java for循环未返回预期值

后学
2023-03-14

为了澄清所使用的输入是100,用于投资金额,利率为5%(在该程序中,取5/100,然后/12=0.00417),在这种情况下,投资的持续时间为6个月。因此,在任何利息累积之前的第0个月,没有利息,所以这只是投资的投入金额(100)。然后,在第一个月,它现在运行正常((100*i)*(i interest());或在或情况下((100*1)*(10.00417))=100.417

但当我到了第二个月,而不是期望的201.252,我得到了400.833。

我正在做一项作业,作业中的输出应显示为:

Months Account Value

------ --------------

0       100.000

1       100.417

2       201.252

3       302.507

4       404.184

5       506.285

6       608.811

但我的表现是:

Months   Account Value 

    0       100.000
    1       100.417
    2       400.833
    3       901.250
    4       1601.667
    5       2502.083
    6       3602.500

我可以看到,我的计算错误是在方法的某处,量保存()

这是我的类代码:

import java.text.DecimalFormat;

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */

/**
 *
 * @author stephaniebrandon
 */
public class AccountValue {

    private double amount;
    private double rate;
    private double months;
    
    private static final DecimalFormat df = new DecimalFormat("0.000");

    //Gets value of amount being inputted into account montly
    public double getAmount() {
        return amount;
    }

    //gets value of interest rate annually
    public double getRate() {
        return rate;
    }

    //gets value of amount of months investment will accumulate
    public double getMonths() {
        return months;
    }

    public void setAmount(double newAmount) {
        amount = newAmount;
    }

    public void setRate(double newRate) {
        rate = newRate;
    }

    public void setMonths(double time) {
        months = time;
    }

    //Serive Methods
    //Interest calculation
    public double interest() {
        double total = 0.0;
        total += ((getRate() / 100) / 12);
        return total;
    }

    //calculate accumulated interest in account
    /**
     * public double amountSaved(){ double total=0.0; total += (getAmount() *
     * getRate() * getMonths()); return total; }
     */
    public void amountSaved() {
        double total = 0.0;
        double val = 0.0;
        System.out.println("\n Months \t Account Value \n");
        for (int i = 0; i <= getMonths(); i++) {
            if(i==0){
                val+= getAmount();
            }else
            val = ((getAmount() * i) * (i + interest()));
            System.out.println("\t" + i + "\t\t" + df.format(val));     
        }
       
    }

    //String returns description of object desired by dev
    @Override
    public String toString() {
        String output = "";
        output += "Montly savings Amount: $" + amount + "\n Annual interest rate, in percent: "
                + getRate() + "% " + "\nNumber of Months: " + months + "\n"+ interest();
        return output;
    }

}

以及测试人员课程:

import java.util.Scanner;

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
 */

/**
 *
 * @author stephaniebrandon
 */
public class AccountValueTester {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
        //Scanner object
        Scanner scan = new Scanner(System.in);
        
        //Create an account value object
        
        AccountValue myAccount;
        
        myAccount = new AccountValue();
        
        //Get info from user
        System.out.println("Enter amount, interest rate and number of months");
        int inputA = scan.nextInt();
        myAccount.setAmount(inputA);
        int inputB = scan.nextInt();
        myAccount.setRate(inputB);
        int inputC = scan.nextInt();
        myAccount.setMonths(inputC);
        System.out.println(myAccount);
        myAccount.amountSaved();
    }
    
}

共有1个答案

童宏富
2023-03-14
if(i==0){
            val+= getAmount();
        }else
        val += ((getAmount()) * (i + interest()));

在第0步,val=100.000;在第1步,val=100.000(100.000*(i利息))

这就是为什么你有不受欢迎的价值。

如果你需要的话

0 100.000

1 100.417

2 201.252

3 302.507

4 404.184

5 506.285

6 608.811

然后它应该在i=1(但应该运行并调试)

val = ((getAmount() * i) * (i + interest()));
 类似资料:
  • 我正在使用JUnit和Mockito库来测试我的应用程序。问题是,当我在代码下面执行时,值在运行时没有返回空列表,并且测试失败。理想情况下,当get执行时,它应该返回空列表 我热切期待着支持。有没有人能帮我一下,如何通过这个测试用例???。如何通过Mockito使第8行的控件通过测试用例??? 请假设,下面两个类没有真实的代码,我们只有二进制文件作为JAR文件,我们不能修改下面的代码....我附上

  • 问题内容: 今天,有人陪我一起滥用Java 中的关键字。我编写了一个简单的循环来验证数组中是否存在某些内容。假设是一个length数组,这是我的代码: 现在有人告诉我这不是一个很好的编程,因为我在循环内使用了该语句,这将导致垃圾回收发生故障。因此,更好的代码将是: 问题是我无法正确解释为什么第一个for循环不是一个好习惯。有人可以给我一个解释吗? 问题答案: 现在有人告诉我这不是一个很好的编程,因

  • loop 有个用途是尝试一个操作直到成功为止。若操作返回一个值,则可能需要将其传递给代码的其余部分:将该值放在 break 之后,并由 loop 表达式返回。 fn main() { let mut counter = 0; let result = loop { counter += 1; if counter == 10 {

  • 我正在学习AOP Spring并尝试一些示例。关于@AfterBack ning,我所理解的是,只有当目标成功返回并且与切入点匹配时,才会调用该方法。然而,在我的例子中,如下所示,我有一个切入点,它定义了所有只返回字符串的方法,但它调用了所有空方法以及返回字符串的方法。 我的建议: 请在下面找到我的Impl课程: 请在下面找到我的MainApp类: 我原本希望只调用getCustomer(),因为

  • 问题内容: 通过一些旧的公司代码,我遇到了一个如下所示的for循环: 我尝试了Google,但找不到任何答案。我是在编程课上睡着了还是这是一个不寻常的循环? 问题答案: 一个for在Java循环结构如下- for (initialization statement; condition check; update) loop body; 如你所见,这里有四个语句- 初始化语句:第一次进入循环时,该

  • 问题内容: 我正在使用Newtonsoft的Json.Net从以下json中选择节点: 以下C#代码段 产量: 现在,这很酷,我想做的是按客户端代码过滤,我认为 可以,但是我显然对语法不够了解。这将返回一个空列表: 并且单个令牌选择器返回null: 我在https://jsonpath.curiousconcept.com/上尝试了几种不同的配置,看来我的查询语法确实坏了。 使用Flow Comm