【问题标题】:How to accumulate a value in java?如何在java中累积一个值?
【发布时间】:2015-06-11 13:02:04
【问题描述】:

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

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

输出

输入金额:500

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

输入金额:45

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

总计:545

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

输出

输入金额:500

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

输入金额: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"));
}

}

【问题讨论】:

    标签: java class constructor instance accumulator


    【解决方案1】:

    您应该在循环之前而不是在每次迭代中创建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"));
    

    每次创建新的 Test 实例时,cashMoney 都会初始化为 0(因为每个实例都有自己的该成员值)。当您最终打印 cashPlus.getMoney() 时,您将打印您创建的最后一个实例的值,您只添加了您输入的最终数量。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        Test cashPlus = new Test();
        

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

        只要在 do/while 之前移动那条线就可以了!

        【讨论】:

          【解决方案4】:

          在循环中,你正在创建

          Test cashPlus = new Test();
          

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

          为了避免这个实例化

          Test cashPlus = new Test();
          

          在开始循环之前。

          【讨论】:

            【解决方案5】:

            替换

            private double money;

            与

            private static int money;

            每次设置值时,它都会变为 0。要关联该值,请将其设为静态变量。

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

            【讨论】:

              猜你喜欢
              • 2016-08-28
              • 1970-01-01
              • 1970-01-01
              • 2014-02-20
              • 2018-01-26
              • 2020-08-02
              • 2016-06-30
              • 1970-01-01
              相关资源
              最近更新 更多