Я должен написать программу для преобразования нотации infix в постфиксную нотацию с использованием стеков в Java. Я в значительной степени сделал, но я получаю сообщение об ошибке. Вот код, как сейчас:Конвертировать инфикс в postix и оценивать выражение в Java
import java.util.Scanner;
import java.util.Stack;
public class InfixToPostfix {
private String infix;
private String postfix = "";
public void convertString (String a){
String str = "";
infix = a;
Stack<String> stack = new Stack<String>();
for (int i = 0; i < infix.length(); i++){
str = infix.substring(i,i+1);
if(str.matches("[a-zA-Z]|\\d"))
postfix += str;
else if (isOperator(str)){
if (stack.isEmpty()){
stack.push(str);
}
else{
String stackTop = stack.peek();
while (getPrecedence(stackTop,str).equals(stackTop)
&& !(stack.isEmpty())){
postfix += stack.pop();
if (!(stack.isEmpty()))
stackTop = stack.peek();
}
stack.push(str);
}
}
}
while(!(stack.isEmpty()))
postfix += stack.pop();
System.out.println("The postfix form of the expression you entered is: " +
postfix);
}
private boolean isOperator(String ch){
String operators = "*/%+-";
if (operators.indexOf(ch) != -1)
return true;
else
return false;
}
private String getPrecedence(String op1, String op2){
String multiplicativeOps = "*/%";
String additiveOps = "+-";
if ((multiplicativeOps.indexOf(op1) != -1) && (additiveOps.indexOf(op2) != -1))
return op1;
else if ((multiplicativeOps.indexOf(op2) != -1) && (additiveOps.indexOf(op1) !=
-1))
return op2;
else if((multiplicativeOps.indexOf(op1) != -1) && (multiplicativeOps.indexOf
(op2) != -1))
return op1;
else
return op1;
}
public static void main(String[] args) {
System.out.println("Enter an expression in the Infix form:");
Scanner scanner = new Scanner(System.in);
String expression = scanner.nextLine();
new convertString (expression);
}
}
Ошибка находится на последней строке и говорит:
«Исключение в потоке„главный“java.lang.Error: Нерешенные проблемы компиляции: convertString не может быть разрешен к типу
at InfixToPostfix.main(InfixToPostfix.java:62)"
Любые идеи о том, как исправить это, что я делаю неправильно
EDIT:? Я получил мой код работает, и это Succ эссенциально конвертируя инфикс в постфикс, но есть ли способ заставить его также оценить выражение и выплюнуть ответ? Например, если вход был 2 + 3, тогда он преобразует его в 23+, а затем выплюнет 5.
Подсказка: проверить линию 62. – kechapito
Я знаю, где ошибка, я просто не знаю, как это исправить. – Brett
Я редактировал свой вопрос в нижней части сообщения. – Brett