如何在java中累加一个值?

How to accumulate a value in java?

现在,我正在学习 class、构造函数和实例。我在 java 中编写了一小段代码,但我坚持使用这个特定的代码。

***我的代码输出应该是这样的:

输出

输入amount:500

是否要重新输入金额?(y/n):y

输入amount:45

是否要重新输入金额?(y/n):n

总计:545

***但是我的输出是这样的:

输出

输入amount:500

是否要重新输入金额?(y/n):y

输入amount:45

是否要重新输入金额?(y/n):n

总计:45

***它没有添加我在整个循环中输入的金额,而是给了我最后输入的金额。

这是第一个代码:

public class Test {
private double money;

public Test(){

}

public void addPoints(double money1){
    money += money1;
}

public int getMoney(){
    return money;
}

}

第二个代码在这里:

import java.util.Scanner;
public class testBody {
   public static void main(String[]args){
    double cashMoney;
    String response = "";
    Scanner hold = new Scanner(System.in);

    do{


    System.out.print("Enter amount:");
    cashMoney = hold.nextDouble();
    Test cashPlus = new Test();
    cashPlus.addPoints(cashMoney);


    System.out.print("Do you want to enter amount again?(y/n):");
    response = hold.next();

    if(response.equalsIgnoreCase("n")){

        System.out.print("TOTAL: " + cashPlus.getMoney());
    }

    }while(response.equalsIgnoreCase("y"));
}

}

您应该在循环之前而不是在每次迭代中创建 Test 实例。

Test cashPlus = new Test();
do {
    System.out.print("Enter amount:");
    cashMoney = hold.nextDouble();
    cashPlus.addPoints(cashMoney);
    System.out.print("Do you want to enter amount again?(y/n):");
    response = hold.next();

    if(response.equalsIgnoreCase("n")){
        System.out.print("TOTAL: " + cashPlus.getMoney());
    }
} while(response.equalsIgnoreCase("y"));

每次创建新的测试实例时,cashMoney 都会初始化为 0(因为每个实例都有自己的成员值)。当您最终打印 cashPlus.getMoney() 时,您打印的是您创建的最后一个实例的值,您只向其中添加了您输入的最终金额。

在行 Test cashPlus = new Test(); 中,每次输入值时都会创建一个新的测试对象。这有效地重置了已经存在的总和,因为在新的 class 中 Test.money 再次等于 0。

问题是这一行在 do/while 循环内:

Test cashPlus = new Test();

Test class 对象保存变量 money(初始化为 0)并且您在 do/while 循环的每次迭代中创建它的一个新实例,从而重置 cashPlus.money 到 0.

只需将那行移动到 do/while 之前就可以了!

替换

private double money;

private static int money;

每次设置该值时,它都会变为 0。为了使该值成为静态变量。

注意 getMoney 的 return 类型是 int 而 money 的数据类型是 double。这必须进行类型转换或更改为类似的数据类型。

在循环中,您正在创建

Test cashPlus = new Test();

每次创建新对象并向其添加总和时使用此语句。总之,它被添加到一个新值,就像它初始化为 0 的新对象一样。

为了避免这种情况实例化

Test cashPlus = new Test();

在开始循环之前。