Avoir du mal à lancer un numéro d'objet de pile en int (Java)


J'écris un programme qui convertit une expression d'infix en postfix. J'ai la partie conversion vers le bas, mais quand il s'agit d'évaluer l'expression postfix, je rencontre des problèmes avec la conversion de char en int en utilisant la pile.

Je continue à obtenir l'erreur: "Exception dans le thread "main" java.lang.ClassCastException: java.lang.Le caractère ne peut pas être converti en java.lang.Entier "

Il se peut que ce soit dans cette partie du code ci-dessous où se trouve le problème mais je ne le suis pas bien sûr:

  Integer x1 = (Integer)stack2.pop();
  Integer x2 = (Integer)stack2.pop();

Merci!

public class Calc {

/**
 * @param args the command line arguments
 */


public static void main(String[] args) {


System.out.println("Please enter your infix expression: ");    
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();

String postfix = "";
Stack<Character> stack = new Stack<Character>();

for(int i = 0; i < input.length(); i++){
    char subject = input.charAt(i);
    if (subject == '*'||subject == '+'||subject == '-'||subject == '/'){           
    while ((stack.empty() == false) && (order(stack.peek()) >= order(subject)))
      postfix += stack.pop() + " ";
      stack.push(subject);                
    }       
    else if(subject == '(')
    {
      stack.push(subject);
    }
    else if(subject == ')')
    {
      while(stack.peek().equals('(') == false){
      postfix += stack.pop() + " ";
    }
      stack.pop(); 
    }
    else{
        if((Character.isDigit(subject) == true) && ((i + 1) < input.length()) && (Character.isDigit(input.charAt(i+1)) == true))
        {
            postfix += subject;
        }
        else if(Character.isDigit(subject))
        {
            postfix += subject + " ";
        }   
        else
        {
            postfix += subject;
        }
    }
}

postfix += stack.pop();
System.out.println("Your post-fix expression is: " + postfix);

char subject2;
int yeah;

Stack stack2 = new Stack();
for (int j = 0; j < postfix.length(); j++){
    subject2 = postfix.charAt(j);
    if(Character.isDigit(subject2) == true){
         stack2.push(subject2);
    }
    if(subject2 == ' '){
        continue;
    }
    else{
        Integer x1 = (Integer)stack2.pop();
        Integer x2 = (Integer)stack2.pop();
        if (subject2 == '+'){
            yeah = x1 + x2;
        }
        if (subject2 == '-'){
            yeah = x1 - x2;
        }
        if (subject2 == '*'){
            yeah = x1 * x2;
        }
        if (subject2 == '/'){
            yeah = x1 / x2;
        }
        else {
            yeah = 0;
        }
    }
}
yeah = (int) stack2.pop();

System.out.println("The result is:" + yeah);


}
static int order(char operator)
{
    if(operator == '+' || operator =='-')
    return 1;
    else if(operator == '*' || operator == '/')
     return 2;
else
    return 0;
}
    }
Author: tripleee, 2014-04-07

1 answers

Vous pouvez résoudre ce problème en lançant sur int. Notez que int et Integer sont pas le même:

Integer x1 = (int) stack2.pop();
Integer x2 = (int) stack2.pop();
 2
Author: Christian, 2017-05-23 12:16:00