当前方法 "evaluatePostfix" 运行 但打印出错误结果 (java)
Current method "evaluatePostfix" running but printing out false results (java)
我已经编写了我的代码,它是一个使用堆栈的链表。该程序采用中缀形式并将其转换为后缀,目前正在输出(使用我的输入和输出文件)正确的转换。但是,我不明白如何让 evaluatePostFix 方法正常工作。我的问题是打印出错误的结果,我不知道为什么。感谢您的帮助!
我当前的 evaluatePostfix 方法:
public static int evaluatePostfix(String postfix) {
Stack<Integer> stack = new Stack<>();
Stack<Character> operatorStack = new Stack<>();
int count = 0;
int operandTwo = '0';
int operandOne = '0';
while (count < postfix.length() && count >= 0) {
char nextCharacter = postfix.charAt(count);
switch(nextCharacter) {
case '^':
operatorStack.push (nextCharacter);
break;
case '+':
stack.push(operandTwo + operandOne);
case '-':
stack.push(operandTwo - operandOne);
case '*':
stack.push(operandTwo * operandOne);
case '/':
stack.push(operandTwo / operandOne);
int result1 = nextCharacter;
stack.push(result1);
break;
default: break;
} //End switch
count = count + 1;
} //End while
//return stack.pop();
return stack.peek();
} //End evaluatePostfix
case '+':
stack.push(operandTwo + operandOne);
case '-':
stack.push(operandTwo - operandOne);
你会希望在其中有一个 break
语句以避免落入下一个 case 块。
您需要先 pop
这两个操作数离开您的堆栈,否则您将无法访问它们的值(并且它们也保留在堆栈中)。
一般来说,要调试这种代码,有用的工具是使用调试器单步调试、插入 println 语句、编写单元测试以及在一张纸上推理流程和变量状态。
我已经编写了我的代码,它是一个使用堆栈的链表。该程序采用中缀形式并将其转换为后缀,目前正在输出(使用我的输入和输出文件)正确的转换。但是,我不明白如何让 evaluatePostFix 方法正常工作。我的问题是打印出错误的结果,我不知道为什么。感谢您的帮助!
我当前的 evaluatePostfix 方法:
public static int evaluatePostfix(String postfix) {
Stack<Integer> stack = new Stack<>();
Stack<Character> operatorStack = new Stack<>();
int count = 0;
int operandTwo = '0';
int operandOne = '0';
while (count < postfix.length() && count >= 0) {
char nextCharacter = postfix.charAt(count);
switch(nextCharacter) {
case '^':
operatorStack.push (nextCharacter);
break;
case '+':
stack.push(operandTwo + operandOne);
case '-':
stack.push(operandTwo - operandOne);
case '*':
stack.push(operandTwo * operandOne);
case '/':
stack.push(operandTwo / operandOne);
int result1 = nextCharacter;
stack.push(result1);
break;
default: break;
} //End switch
count = count + 1;
} //End while
//return stack.pop();
return stack.peek();
} //End evaluatePostfix
case '+':
stack.push(operandTwo + operandOne);
case '-':
stack.push(operandTwo - operandOne);
你会希望在其中有一个
break
语句以避免落入下一个 case 块。您需要先
pop
这两个操作数离开您的堆栈,否则您将无法访问它们的值(并且它们也保留在堆栈中)。一般来说,要调试这种代码,有用的工具是使用调试器单步调试、插入 println 语句、编写单元测试以及在一张纸上推理流程和变量状态。