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;j s、 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