У меня есть задача сделать калькулятор стека, и вот что у меня есть:
public static void main(String[]args) {
ArrayList<String> commands = new ArrayList<String>();
commands.add("1");
commands.add("2");
commands.add("3");
commands.add("4");
commands.add("+");
commands.add("+");
commands.add("+");
commands.add("2");
commands.add("*");
commands.add("=");
System.out.println(commands); //prints the list
System.out.println(computeResult(commands));
commands.clear();
commands.add("2");
commands.add("4");
commands.add("/");
commands.add("=");
System.out.println(commands); //prints the list
System.out.println(computeResult(commands)); // gives 2
commands.clear();
commands.add("3");
commands.add("4");
commands.add("-");
commands.add("=");
System.out.println(commands); //prints the list
System.out.println(computeResult(commands)); // gives 1
}
public static int computeResult(ArrayList<String> commands) {
Stack<Integer> dataStack = new Stack<Integer>();
Iterator<String> commandsIterator = commands.iterator();
while(commandsIterator.hasNext()) {
/* sums up the two top elements from the stack and pushes the solution back on the stack
* @param int A, int B, int C
* @return
*/
if(commands.contains("+")) {
int A = dataStack.pop();
int B = dataStack.pop();
int C = A + B;
dataStack.push(C);
}
/* subtract the two top elements from the stack and pushes the solution back on the stack
* @param int A, int B, int C
* @return
*/
else if(commands.contains("-")) {
int A = dataStack.pop();
int B = dataStack.pop();
int C = B - A;
dataStack.push(C);
}
/* multiplies the two top elements from the stack and pushes the solution back on the stack
* @param int A, int B, int C
* @return
*/
else if(commands.contains("*")) {
int A = dataStack.pop();
int B = dataStack.pop();
int C = A * B;
dataStack.push(C);
}
/* divides the two top elements of the stack and pushes the solution back on the stack
* @param int A, int B, int C
* @return
*/
else if(commands.contains("/")) {
int A = dataStack.pop();
int B = dataStack.pop();
int C = B / A;
dataStack.push(C);
}
/* pops the top element
* @return popped element
*/
else if(commands.contains("=")) {
return dataStack.peek();
}
/* if the command is a number it will be assigned to an integer and pushed on the stack
* @param int i, String command
* @return
*/
else {
String command = commandsIterator.next();
int i = Integer.parseInt(command);
dataStack.push(i);
}
}
return 0;
}
Но проблема в том, что на выходе я получаю указанную выше ошибку. В этой программе я использовал if else, чтобы проверить, является ли мой ввод оператором или числом, и если это число, то я получаю sh число, если это оператор, я вставляю два верхних элемента и выполняю расчет. Результат снова выдвинут, поэтому я подумал, что это не должно быть проблемой. Я знаю, что означает эта ошибка, поэтому у меня вопрос, как ее решить в данном конкретном случае.