Je dois évaluer une expression de préfixe en utilisant des piles, je l'ai fait mais je ne comprends pas pourquoi le code ne fonctionne pas correctement, il marque 2 bogues lorsque je compile le code, ils sont:Évaluer une expression de préfixe en utilisant des piles
Exception dans le thread "principal" java.lang.ClassCastException: java.lang.String ne peut pas être jeté à java.lang.Integer à evaluationprefix.EvaluationPreFix.EvaluationPrefix (EvaluationPreFix.java:56) à evaluationprefix.EvaluationPreFix. principal (EvaluationPreFix.java:25)
public class EvaluationPreFix {
public static void main(String[] args) {
Stack st = new Stack();
Scanner sc = new Scanner(System.in);
System.out.println("enter the size of expression");
int t = sc.nextInt();
sc.nextLine();
for (int i = 0; i < t; i++) {
System.out.println("enter an element");
String element = sc.nextLine();
st.push(element);
}
int r = EvaluationPrefix(st); //marks an Error here
System.out.println("Result: " + r);
}
public static int EvaluationPrefix(Stack st) {
Stack st2 = new Stack();
while (!st.isEmpty()) {
Object e = st.pop();
if (e.equals('+')) {
st2.push((Integer) st2.pop() + (Integer) st2.pop());
} else if (e.equals('-')) {
st2.push((Integer) st2.pop() - (Integer) st2.pop());
} else if (e.equals('*')) {
st2.push((Integer) st2.pop() * (Integer) st2.pop());
} else if (e.equals('/')) {
st2.push((Integer) st2.pop()/(Integer) st2.pop());
} else {
st2.push(e);
}
}
return (Integer) st2.pop();//marks an error here
}
}
Je pense que partout où vous utilisez 'st.push' il devrait être' st2.push' (lors de la vérification des opérateurs) –
Non. Seul le dernier sur passe à 'st2'. Essayez-le, par exemple, 2 3 + vous donnera un résultat de 5. Vous devez repousser dans la même pile. –
mais c'est préfixe, donc ça devrait être + 2 3 –