解析麻烦和做数学"带数字(一个简单的java计算器)

时间:2017-04-07 04:13:55

标签: java

我正在尝试使用一个简单的String语句并解析它以打印出一个简单的答案。

到目前为止,我无法弄清楚为什么我一直得到错误的答案。

比如说 - 我用" 2 * 3 * 4 * 5/2/3/2"插入一个字符串。

预期答案是10,但我收到了1.5

的答案

有人能在这看到这个问题吗?我假设这不是一个操作顺序的例子(我还没有那么远)。

public class TestingforExcel {
    static String tableholder = "2 * 3 * 4 * 5 / 2 / 3 / 2";
    public static void main(String args[]){
        String[] fracEquationHolder = tableholder.split(" ",tableholder.length()); // holds the fractions and operator
        String operators = "";
        double operand;
        double operand2;
        double answer = 0;

        for(int i =0; i <= (fracEquationHolder.length-2); i+=2){
            operators = fracEquationHolder[i+1];
            operand = Double.parseDouble(fracEquationHolder[i]);
            operand2 = Double.parseDouble(fracEquationHolder[i+2]);
            if(operators.indexOf("+")>=0){
                answer = operand + operand2;
            }else if(operators.indexOf("-")>=0){
                answer = operand - operand2;
            }else if(operators.indexOf("*")>=0){
                answer = operand * operand2;
            }else if(operators.indexOf("/")>=0){
                answer = operand / operand2;
            }else
                System.out.print(answer+""); 
        }
        System.out.print(answer+""); 

    }

3 个答案:

答案 0 :(得分:0)

您总是使用operandoperand2进行计算。但如果answer中有一些先前的值,那么您应该使用answer计算operand2。使用以下

if(answer > 0)
    operand = answer;
else 
    operand = Double.parseDouble(fracEquationHolder[i]);

另外我只是指出你的代码不是逻辑的问题。您的代码不遵循BODMAS规则。所以实施那部分

答案 1 :(得分:0)

在第一次迭代中,您必须阅读2个操作数。从第二个运算符使用上一个操作的答案作为操作数1。

答案 2 :(得分:0)

public class TestingforExcel {
    static String tableholder = "2 * 3 * 4 * 5 / 2 / 3 / 2";
    public static void main(String args[]){
         String[] fracEquationHolder = tableholder.split(" ",tableholder.length()); // holds the fractions and operator
        String operators = "";
        double operand;
        double operand2;
        double answer = Double.parseDouble(fracEquationHolder[0]);

        for(int i =0; i <= (fracEquationHolder.length-2); i+=2){
            operators = fracEquationHolder[i+1];
            operand = Double.parseDouble(fracEquationHolder[i]);
            operand2 = Double.parseDouble(fracEquationHolder[i+2]);
            if(operators.indexOf("+")>=0){
                answer += operand2;
            }else if(operators.indexOf("-")>=0){
                answer -= operand2;
            }else if(operators.indexOf("*")>=0){
                answer *=  operand2;
            }else if(operators.indexOf("/")>=0){
                answer /=   operand2;
            }else
                System.out.print(answer+""); 
        }
        System.out.print(answer+""); 

    }

你必须遇到问题:

1-你得到1.5,因为这是最后一次操作(3/2)     你应该使用(回答+ =操作数+操作数2)

2-你应该使用最后一个操作的总和而不是操作数