gpt4 book ai didi

java - 使用堆栈在 java 中获取 infix/postfix 的错误输出

转载 作者:行者123 更新时间:2023-12-01 10:10:41 28 4
gpt4 key购买 nike

对于输入 (1+3)*(1+3) 我得到 1 3 + * 1 3 + 作为输出,而它应该是 1 3 + 1 3 + *。我已经调试过,但无法弄清楚为什么乘法直到最后才成立。我在 checkOp() 中是否没有以正确的方式比较它?

public String infixToPostfix() throws StackEmptyException{

Stack<String> s = new Stack<String>();
String expression = jtfInfix.getText();
String delims = "+-*/()123456789 ";
StringTokenizer strToken = new StringTokenizer(expression, delims, true);
String result = "";

while(strToken.hasMoreTokens()){

String token = strToken.nextToken();

if(token.equals("(")){
s.push(token);
}
else if(token.equals(")")){

while(s.peek().equals("(") != true){
result += " " + s.pop();
}
}//first elseif
else if (checkOp(token)){
if(s.isEmpty() == true) {
s.push(token);
}
else {
if(getOrder(token) < findOrder(s.peek())) {
result += " " + s.pop();
s.push(token);
}
else {
s.push(token);
}
}
}
else {
result += " " + token;
}
}
while(s.isEmpty()) {
result += s.pop();
}

return result;
}// infixToPostFix()

public int findOrder(String token) {
int order = 0;
if((token.equals("+")) || (token.equals("-"))) {
order = 1;
}
else if((token.equals("*")) || (token.equals("%"))) {
order = 2;
}
else if(token.equals(")")) {
order = 0;
}
return order;
}

public int getOrder(String token) {
int order = 0;
if((token.equals("+")) || (token.equals("-")) ) {
order = 1;
}
else if((token.equals("*")) || (token.equals("%")) ) {
order = 2;
}
return order;
}


private boolean checkOp(String token) {
return ((token.equals("+")) || (token.equals("-")) || (token.equals("*")) ||
(token.equals("%")) );

}

最佳答案

有几个错误

首先,匹配后需要弹出括号

while(s.peek().equals("(") != true){
result += " " + s.pop();
}
s.pop(); // pop the matching left parenthesis

并且您希望在完成后将所有内容从堆栈中弹出

while(s.isEmpty()) {
result += s.pop();
}

应该是

while(!s.isEmpty()) {
result += " " + s.pop();
}

作为评论记录有助于了解发生了什么。

关于java - 使用堆栈在 java 中获取 infix/postfix 的错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36144696/

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