提问人:ian 提问时间:11/30/2022 最后编辑:Federico klez Cullocaian 更新时间:11/30/2022 访问量:57
后缀评估计算结果错误
postfix evaluation calculated result is wrong
问:
我正在尝试使用堆栈实现后缀评估,但是计算后的结果不正确,我无法弄清楚是哪个部分的计算错误,非常感谢。
import java.util.Stack;
public class PostFixEvaluate {
public static float calculate(Float operand_1,char operator,Float operand_2 ){
switch(operator){
case '+':
return operand_2 + operand_1;
case '-':
return operand_2 - operand_1;
case '*':
return operand_2 * operand_1;
case '/':
return operand_2 / operand_1;
}
return 0;
} //end calculate()
public static float postFixEvaluation(String expr){
Stack<Float> stack = new Stack<>();
int index = 0;
while(index < expr.length()){
char token = expr.charAt(index);
boolean x = isOperand(token);
if(x == true){ //operand
float operandIn = (float)token;
stack.push(operandIn);
}
else{ //operator
float a = stack.pop(); //operand_1
float b = stack.pop(); //operand_2
char w = token; //operator
stack.push(calculate(a, w, b));
}
index += 1;
} //end while
float result = stack.pop();
return result;
} //postFixEvaluation()
/*Operand or operator? operator return 1, operand return 2*/
public static boolean isOperand(char c){
switch(c){
case '+':
case '-':
case '*':
case '/':
return false; //an operator
default:
return true; //an operand
} //end switch()
} //end isOperand()
}
输入后缀“312*+456*+97-/+”后,结果是3958.0,预计是22.0,这比错误多得多,但我仍然无法弄清楚为什么结果是3958.0。
答:
0赞
Federico klez Culloca
11/30/2022
#1
char token = expr.charAt(index);
在第一次迭代中返回,但这是表示字符(即 51),而不是数字 3。'3'
char
'3'
要使用数字而不是表示该数字的字符,您可以通过从中减去“0”
将其推入堆栈,如下所示:
stack.push(operandIn - '0');
评论
0赞
ian
12/1/2022
谢谢先生,我确实看到 GFG 上的有人添加了那一行,但是在我输入那行后,结果是 2.875,这仍然是错误的。
0赞
Federico klez Culloca
12/1/2022
奇怪的是,当我跑步时,我得到了 22.0
评论
boolean x = isOperand(token);if(x == true){
if(isOperand(token)){
Character.digit(token, 10)
char
digit(token, 10)
digit(token, 10) == (token - '0')