gpt4 book ai didi

java - 使用堆栈和运算符优先级的中缀到后缀

转载 作者:行者123 更新时间:2023-12-01 05:02:18 25 4
gpt4 key购买 nike

我知道 SO 上已经有类似的问题,但我找不到可以解决我遇到的问题的问题。我正在尝试创建一种将中缀表示法表达式转换为后缀表示法的方法,同时实现运算符的优先级以获得正确的输出。我用常用的方法(push、pop、peek 等)制作了自己的堆栈类,它工作得非常好。我的问题是,对于更复杂的表达式,例如 A-(B+C^D^C)/D*B ,我得到错误的输出。转换的结果应该是 ABCDC^^+D/B*- 而我不断得到 ABCDC^^+D/-B

这是我的方法:

    public static String infixToPostfix(char[] expressionArray, CharStack opStack){
String output = "";
int length = expressionArray.length;
for(int i = 0; i < length; i++){
if(isOperatorOrBracket(expressionArray[i])){
if(priorityAtInput(expressionArray[i]) >= priorityAtStack(opStack.peek())){
opStack.push(expressionArray[i]);
}else if(priorityAtInput(expressionArray[i]) == priorityAtStack(opStack.peek())){
output = output + expressionArray[i];
}else{
while(opStack.peek() != '('){
output = output + opStack.pop();
}
opStack.pop();
}
}else{
output = output + expressionArray[i];
}
}
while(!opStack.empty()){
if(opStack.peek() != '('){
output = output + opStack.pop();
}else if(opStack.peek() == '('){
opStack.pop();
}
}
return output;
}

如果您需要任何组件方法,请告诉我。非常感谢任何帮助!

最佳答案

盯着屏幕一个小时后我发现了问题。感谢老天 eclipse 中的调试器!

public static String infixToPostfix(char[] expressionArray, CharStack opStack){
String output = "";
int length = expressionArray.length;
for(int i = 0; i < length; i++){
if(isOperatorOrBracket(expressionArray[i])){
if(priorityAtInput(expressionArray[i]) >= priorityAtStack(opStack.peek())){
opStack.push(expressionArray[i]);
}else if(priorityAtInput(expressionArray[i]) < priorityAtStack(opStack.peek())){
while(priorityAtInput(expressionArray[i]) < priorityAtStack(opStack.peek())){
output = output + opStack.pop();
if(opStack.peek() == '('){
opStack.pop();
break;
}else if(priorityAtInput(expressionArray[i]) >= priorityAtStack(opStack.peek())){
opStack.push(expressionArray[i]);
break;
}
}
}else{
while(opStack.peek() != '('){
output = output + opStack.pop();
}
opStack.pop();
}
}else{
output = output + expressionArray[i];
}
}
while(!opStack.empty()){
if(opStack.peek() != '('){
output = output + opStack.pop();
}else if(opStack.peek() == '('){
opStack.pop();
}
}
return output;
}

关于java - 使用堆栈和运算符优先级的中缀到后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13237517/

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