如何在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();
在开始循环之前。
现在,我正在学习 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();
在开始循环之前。