gpt4 book ai didi

java - 使用堆栈进行后缀评估

转载 作者:行者123 更新时间:2023-12-02 08:10:59 24 4
gpt4 key购买 nike

我正在尝试编写一种求解后缀方程的方法。对于前。

1 2 + 3 *

这 = 9

到目前为止,我收到了ArrayoutofboundsException。我认为问题出在我的 postFixEvaluation 方法中的 if(statement)

代码的第一部分是我正在谈论的需要帮助的地方。之后是我的其余代码。不确定你们是否需要阅读该内容。

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);
}
<小时/>

以下是可能相关的其余代码:

public class Stacked {

int top;
char stack[];
int maxLen;

public Stacked(int max) {
top = 0;
maxLen = max;
stack = new char[maxLen];

}

public void push(int result) {
top++;
stack[top] = (char) result;

}

public int pop() {
int x;
x = stack[top];
//top = top - 1;
top--;
return x;

}

public boolean isStackEmpty() {
if (top == 0) {
System.out.println("Stack is empty " + "Equation Good");
return true;
} else
System.out.println("Equation is No good");
return false;
}

public void reset() {

top = -1;
}

public void showStack() {
System.out.println(" ");
System.out.println("Stack Contents...");
for (int j = top; j > -1; j--) {
System.out.println(stack[j]);
}
System.out.println(" ");
}

public void showStack0toTop() {
System.out.println(" ");
System.out.println("Stack Contents...");
for (int j = 0; j >= top; j++) {
System.out.println(stack[j]);
}
System.out.println(" ");
}
}

最佳答案

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

// 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

关于java - 使用堆栈进行后缀评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7435752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com