我是android studio和java的新手,缺少了解计算器的知识和逻辑。需要帮助

时间:2018-08-10 02:12:55

标签: java android android-studio

我正在考虑如何在第一次单击该按钮时显示结果。之后,我第二次单击,然后该按钮将清除结果。

示例:第一次单击,它将计算

R.id.Equal: calculate(true);

计算方法

private void calculate(boolean IsEqualClick) {
        String input = getinput();
        try {
            if (!isEmpty()) {
                if (input.contains("x")) {
                    input.replaceAll("x", "*");
                }
            }
            Expression expression = new ExpressionBuilder(input).build();
            double result = expression.evaluate();
            if (IsEqualClick) {
                inputtext.setText(String.valueOf(twoDForm.format(result)));
                resulttext.setText("");

            } else {
                resulttext.setText(String.valueOf(twoDForm.format(result)));
            }
        } catch (Exception e) {
            stateError = true;
            isNumber = false;
        }
    }

我想不出如何编写代码。如果我第二次单击,它将被删除。我应该再次使用if语句进行处理吗?

1 个答案:

答案 0 :(得分:0)

如果您已经正确编写了switch语句,并且没有经过硬编码,则无需检查isEqualClick

现在为您的解决方案执行以下操作:-

声明一个全局变量boolean toCalculate = true;,此变量将检查是否需要计算或必须清除该框;

calculate();的功能调用

R.id.Equal: calculate();

calculate()函数:-

    private void calculate() {
              if (toCalculate) {
                     String input = getinput();
            try {
                if (!isEmpty()) {
                    if (input.contains("x")) {
                        input.replaceAll("x", "*");
                    }
                }

                Expression expression = new ExpressionBuilder(input).build();
                double result = expression.evaluate();
                /*->Write all your code for printing the answer here<-*/
                /*for eg:- result.setText(String.valueOf(twoDForm.format(result)))*/ 
                toCalculate = false;
              } catch (Exception e) {
                 stateError = true;
                 isNumber = false;
                }
                } else {
                 /*->Write all your code for clearing the answer here<-*/
                 /*for eg:- result.setText("")*/    
                 toCalculate = true;
                }

        }

或者您可以执行以下操作,而不必像上面那样更改功能:-

 R.id.Equal: if(toCalculate)
              {
                 calculate();
                 toCalculate = false;
              }else
              {
                 /*->Write all your code for clearing the answer here<-*/
                 /*for eg:- result.setText("")*/
                 toCalculate = true; 
              }
         break;