Comment puis-je gérer EmptyStackException
pour ce bloc de code? Montre que ma pile est vide après avoir lu une partie du fichier. Je devine que cela a à voir avec les méthodes push()
et pop()
mais pas complètement sûr.EmptyStackException pour une pile non vide
Stack<Integer> stack = new Stack<Integer>();
int op1, op2, result = 0;
String token;
StringTokenizer tokenizer = new StringTokenizer(expr);
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
char c = token.charAt(0);
if (isOperator(c)) {
op2 = ((Integer) stack.pop()).intValue();
op1 = ((Integer) stack.pop()).intValue();
result = evalSingleOp(token.charAt(0), op1, op2);
stack.push(new Integer(result));
} else {
stack.push(new Integer(Integer.parseInt(token)));
}
}
result = ((Integer) stack.pop()).intValue();
return result;
}
"Dit que ma pile est vide quand elle ne l'est pas." Donc vous appelez le runtime Java un menteur? Bien sûr, cela a à voir avec 'push()' et 'pop()'. Ce sont les seules choses qui manipulent la pile. Soit vous recevez une mauvaise entrée, soit vous avez une erreur de logique. Montrer plus d'effort. – Kayaman
C'est simple. Vous commencez avec une pile vide, puis le programme saute la boucle while car il n'y a pas de jetons dans l'entrée, alors vous essayez de faire apparaître la pile mais il n'y a rien là. S'il y a vraiment des jetons dans l'entrée, ** pourquoi les caches-tu? ** – ajb
Aussi, où se produit l'exception? Vous n'avez pas montré la pile, ce qui est la chose la plus importante à montrer quand vous avez une exception. – Kayaman