Java 使用堆栈的后缀评估

Java 使用堆栈的后缀评估,java,Java,我想写一个解决后缀方程的方法。例如 1 2 + 3 * 这将=9 现在我得到了一个BoundsException阵列。我认为问题出在我的postFixEvaluation方法中的if(语句)上 代码的第一部分是我所说的需要帮助的方法。 之后是我的代码的其余部分。我不确定雅尔是否需要阅读 public int PostfixEvaluate(String e) { String Operator = ""; int number1; int number2; in

我想写一个解决后缀方程的方法。例如

1 2 + 3 *
这将=
9

现在我得到了一个
BoundsException阵列。我认为问题出在我的
postFixEvaluation
方法中的
if(语句)

代码的第一部分是我所说的需要帮助的方法。 之后是我的代码的其余部分。我不确定雅尔是否需要阅读

public int PostfixEvaluate(String e) {
    String Operator = "";
    int number1;
    int number2;
    int result = 0;
    char c;
    number1 = 0;
    number2 = 0;

    for (int j = 0; j < e.length(); j++) {
        c = e.charAt(j);
        if (c == (Integer) (number1)) {
            s.push(c);
        } else {
            number1 = s.pop();
            number2 = s.pop();
            switch (c) {
                case '+':
                    result = number1 + number2;
                    break;
                case '-':
                    result = number1 - number2;
                    break;
                case '*':
                    result = number1 * number2;
                    break;
                case '/':
                    result = number1 / number2;
                    break;
                case '%':
                    result = number1 % number2;
                    break;
            }
        }
    }

    return result;
}

public static void main(String[] args) {
    Stacked st = new Stacked(100);
    String y = new String("(z * j)/(b * 8) ^2");
    String x = new String("10 3 + 9 *");
    TestingClass clas = new TestingClass(st);

    clas.test(y);
    //System.out.println(stacks.test(y));

    clas.PostfixEvaluate(x);
}

您需要将操作的结果推回到堆栈上。然后在末尾(当位于表达式字符串末尾时),弹出堆栈并返回值

// excerpted, with odd bracket indentions unchanged.
for(int j = 0; j < e.length(); j++){
    c = e.charAt(j);
    if (c == (Integer)(number1)) {
        s.push(c); }
    else {
        number1 = s.pop();
        number2 = s.pop();
        switch(c) {
            case '+':
                result = number1 + number2;
                break;
            case '-':
                result = number1 - number2;
                break;
            case '*':
                result = number1 * number2;
                break;
            case '/':
                result = number1 / number2;
                break;
            case '%':
                result = number1 % number2;
                break;
            }
        s.push(result);  // <=== push here
        }
    }
}

return s.pop(); // <==== pop here
//摘录,奇数括号缩进不变。
对于(int j=0;js、 push(result);//这是我在推结果时不得不引起的一个问题,它会给我一个错误,说“无法访问的代码”,如果我移动任何括号,它会给我更多的错误。你只是在编辑时引入了一些不正确的语法。概念仍然是,你需要在每次操作后推送,然后在最后弹出并返回。还有一件事。我会打印出两个随机数,而不是一个正确答案。在If(语句)中在for循环之后。我试图说“if(c是一个数字)”,但我有一种不好的感觉,这是错误的。对于整数检查,请尝试使用
integer.parseInt()
:@Bart Kiers:谢谢你花时间这么做。我太懒了。@Jonathan M,没问题。我的IDE帮了不少忙。:)我想这是我们车队第二次出现我的懒惰。
// excerpted, with odd bracket indentions unchanged.
for(int j = 0; j < e.length(); j++){
    c = e.charAt(j);
    if (c == (Integer)(number1)) {
        s.push(c); }
    else {
        number1 = s.pop();
        number2 = s.pop();
        switch(c) {
            case '+':
                result = number1 + number2;
                break;
            case '-':
                result = number1 - number2;
                break;
            case '*':
                result = number1 * number2;
                break;
            case '/':
                result = number1 / number2;
                break;
            case '%':
                result = number1 % number2;
                break;
            }
        s.push(result);  // <=== push here
        }
    }
}

return s.pop(); // <==== pop here