Я пытаюсь взять выражение у пользователя и оценить его, но я продолжаю получать ошибки метода pop, которые приводят к массиву indexexboundofboundsexceptions и исключениям нулевого указателя.Как я могу это исправить, и есть ли проблема, которая лежит в другом месте, что мне не хватает?Спасибо
Вот мой класс стека
public class MyStack<E> {
private E[] data;
private int top;
public MyStack() {
data = (E[]) (new Object[10]);
top = -1;
}
public void push(E item) {
top++;
data[top] = item;
}
public E peek() {
return data[top];
}
public E pop() {
top--;
return data[top + 1];
}
public boolean isEmpty() {
return top < 0;
}
}
Вот класс оценщика
public class EvalPostfix {
private String post;
public EvalPostfix(String post) {
this.post = post;
}
public int eval() {
MyStack<Integer> stack = new MyStack<Integer>();
Scanner tokens = new Scanner(post);
int result = 0;
while (tokens.hasNext()) {
if (tokens.hasNextInt()) {
stack.push(tokens.nextInt());
} else {
int right = stack.pop();
int left = stack.pop();
if (tokens.equals("+")) {
result = left + right;
} else if (tokens.equals("-")) {
result = left - right;
} else if (tokens.equals("*")) {
result = left * right;
} else if (tokens.equals("/")) {
result = left / right;
}
stack.push(result);
}
}
return stack.pop();
}
}
, а вот основной класс
public class Prog4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter postfix expression: ");
String post = input.nextLine();
EvalPostfix ev = new EvalPostfix(post);
int result = ev.eval();
}
}