如何从editText评估数学表达式?

时间:2018-07-22 16:11:43

标签: java android

我在一个简单的计算器应用程序上工作,该应用程序没有像Google计算器这样的表达式。而是在按下操作按钮时将结果存储在操作数中,因此它不遵循BODMAS优先级规则。就像我执行2 + 2/2一样,我得到4作为结果,而结果应为3,因为首先执行除法 有没有一种方法可以将输入作为一个整体表达,然后对其进行集体评估? 我可以使用Java中包含的任何预定义类吗?

运算符和计算执行功能的onClickListeners的代码为:

View.OnClickListener opListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Button b = (Button) view;
                String op = b.getText().toString();
                String value = newNumber.getText().toString();
                try {
                    Double doubleValue = Double.valueOf(value);
                    performOperation(doubleValue, op);
                } catch (NumberFormatException e) {
                    newNumber.setText("");
                }
                pendingOperation = op;
                displayOperation.setText(pendingOperation);
            }
        };


private void performOperation(Double value, String operation) {
        if (operand1 == null) {
            operand1 = value;
        } else {
            if (pendingOperation.equals("=")) {
                pendingOperation = operation;
            }

            switch (pendingOperation) {
                case "=":
                    operand1 = value;
                    break;
                case "/":
                    if (value == 0) {
                        operand1 = 0.0;
                        Toast.makeText(this,"Cannot Divide By Zero, Resetting value to zero",Toast.LENGTH_LONG).show();
                    } else {
                        operand1 /= value;
                    }
                    break;
                case "*":
                    operand1 *= value;
                    break;
                case "+":
                    operand1 += value;
                    break;
                case "-":
                    operand1 -= value;
                    break;
            }
        }
        result.setText(operand1.toString());
        newNumber.setText("");
    }

0 个答案:

没有答案