Наша задача — вычислить постфиксное выражение, заданное в формате String, и вернуть ответ в виде Long. Выражение имеет характеристики, в которых каждый элемент разделен одним пробелом и содержит только 4 оператора +, -, *, \. Например. "2 3 9 4 / + *"
Проблема в том, что мой код сталкивается с исключением EmptyStackException:
Код: Выделить всё
public static long evaluate(String s) {
String[] byUnit = s.split("\\s");
long total = 0L;
boolean initialAssign = true;
Stack stack = new Stack();
for(String unit: byUnit) {
try {
stack.push(Long.parseLong(unit));
//System.out.println(stack.peek());
continue;
}catch(Exception e) {
if(initialAssign) { \\Assigns initial value to total since it is 0
long temp = stack.pop();
total = stack.pop();
stack.push(temp);
initialAssign = false;
}
//System.out.println(stack.peek());
switch(unit) {
case "+":
total += stack.pop();
//System.out.println(stack.peek());
case "-":
total -= stack.pop();
case "*":
total *= stack.pop();
case "/":
total /= stack.pop();
}
}
}
return total;
}
Код: Выделить всё
Exception in thread "main" java.util.EmptyStackException
at java.base/java.util.Stack.peek(Stack.java:103)
at java.base/java.util.Stack.pop(Stack.java:85)
at main.PostFixEval.evaluate(PostFixEval.java:43)
at main.PostFixEval.main(PostFixEval.java:11)
Подробнее здесь: https://stackoverflow.com/questions/793 ... xpressions
Мобильная версия