Для ввода (1 + 3) * (1 + 3) Я получаю 1 3 + * 1 3 + для вывода, когда он должен быть 1 3 + 1 3 + *. Я отлаживаю и не могу понять, почему умножение не выполняется до конца. Я не сравниваю это в правильном порядке в checkOp()?Получение неверного вывода для infix/postfix в java с использованием стеков
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("%")) );
}
Спасибо за предложения, но вывод остается тем же. – H22
@ H22 Ответ BevynQ верен. Приведенный код показывает «1 3 + 1 3 +» с непустым стеком из [(, *, (]). Ваше утверждение о том, что оно выводит «1 3 + * 1 3 +», кажется неправильным. Возможно, вы изменили ваш код после того, как вы разместили вопрос? – Tibrogargan
@ H22 Мне не удалось выполнить репликацию вывода. Мой результат сопоставлен с @Tibrogargan. Я заменил 'jtfInfix.getText()' на '" (1 + 3) * (1 + 3) "' для моего теста – BevynQ