【问题标题】:Using a running total for calculator使用计算器运行总计
【发布时间】:2017-03-28 23:59:09
【问题描述】:

我在安卓上做了一个计算器。我只得到两个数字 (1+1) 的结果,但我希望一次能够进行不止一个计算,而不是每次需要新答案时都按回车键 (1+1-2)。

类似这样:2 + 2(按下新运算符)4 + 3(按下等于)7

但我不确定如何在我的代码中实现这一点。

这是每个操作员的按钮代码:

btnPlus.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            perform();
            operation = "+";
        }
    }); // end btnPlus

这是我的计算方法:

private void calculate() {

    if (operation == null) {
        numberInput.setText(null);

    } else if (operation.equals("+")){
        numResult = (secondNum + firstNum);
        numberInput.setText(String.valueOf(numResult));

    } else if (operation.equals("-")) {
        numResult = (secondNum - firstNum);
        numberInput.setText(String.valueOf(numResult));

    } else if (operation.equals("/")) {
        numResult = (secondNum / firstNum);
        numberInput.setText(String.valueOf(numResult));

    } else if (operation.equals("*")) {
        numResult = (secondNum * firstNum);
        numberInput.setText(String.valueOf(numResult));
    } // end if statement

}

如果需要,也可以执行:

private void perform() {
    str = "";
    secondNum = firstNum;
}

【问题讨论】:

    标签: java android calculator cumulative-sum


    【解决方案1】:

    根据您当前的代码,解决问题的一种快速方法是使用 textChangeListener/TextWatcher(假设您有 EditTextTextView)来检测每次操作员输入然后调用操作函数。它看起来像这样。

    myEditText.addTextChangedListener(new TextWatcher() {
    
        public void afterTextChanged(Editable s) {}
    
        public void beforeTextChanged(CharSequence s, int start,
           int count, int after) {
        }
    
        public void onTextChanged(CharSequence s, int start,
          int before, int count) {
          // if 2nd operator is detected
          // call calculate
          // append 2nd operator
        }
    

    });

    【讨论】:

      【解决方案2】:

      您可以按照我在评论中的建议进行操作,只需为每个操作列出一个列表,然后在每次当前数据更改时计算它(可能有不同的方法可以“知道”某些结果是否是最终结果,具体取决于关于如何从应用中删除。

      我会做这样的事情,然后每次按下按钮时调用添加输入的逻辑,然后计算并写出来

      public class Calc {
      
          private List<String> inputs = new ArrayList<>();
      
          public String calculate(List<String> input){
              String result = "";
              for(String current : input){
                  switch (current) {
                      case "(":
                          // do stuff
                      case "+":
                          //do stuff
                      default:
                          // do stuff
                  }
              }
              return result;
          }
      
          btnPlus.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                  // add to list, and call calculate
              }
          }); // end btnPlus
      }
      

      【讨论】:

        猜你喜欢
        • 2017-10-04
        • 2023-03-23
        • 2015-06-29
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        • 2020-06-30
        • 2014-06-14
        相关资源
        最近更新 更多