بحاجة الى مساعدة في برنامج التحويل من infix الى postfix و اظهار النتيجة

السلام عليكم و رحمت الله و بركاته

برنامج للتحويل من infix الى postfix و اظهار نتيجة الـpostfix

يحتوي البرنامج على 3 فئات (classes) فئة للتحويل(converter class) و فئة للحساب (calculate class) و الفئة الاساسية (main class) البرنامج يعمل بشكل جيد و لكن المشكلة هي في - فئة الحساب (calculate class) - عند ادخال عدد يتكون من خانتين او اكثر مثل (23 او 234) حاولت تحسين الأوامر و لكن لم احرز نتيجة جيدة لانه يظهر لي خطاء منطقي بحسب اعتقادي

infix : 19 - 5 + 2

postfix : 19 5 - 2 +

java.lang.Character cannot be cast to java.lang.Integer : فعليا يظهر لي هذا الخطاء عند التشغيل

احتاج الى مساعدتكم لاتمام هذا البرنامج الذي اريده ان يحسب اي عدد مهما كانت عدد خاناته


arwa00alghamdi أضف ردا

هذا هو السطر الذي يشير اليه الخطاء بانه لايمكنني ان اغير النوع و لا كنني اعتقد بان الخطاء منطقي وليس في التحويل

rightOP=(int) st.pop();

هذه هي الاوامر البرمجية لفئة الحساب 

import java.util.*;

public class App extends Stack{

private boolean CheckOP(char ch) {
    return ch == '+'  ||  ch == '-'  ||  ch == '*'  ||  ch == '/' ||  ch == '%' || ch=='=' || ch=='<' || ch=='>' || ch == '^'|| ch=='(' || ch==')';
}

public int calculate(String s){
    int result=0;    int size = s.length();
    Stack st = new Stack();
    int rightOP=0;
     int leftOP=0 ;
    for(int i=0;i<size;i++){
        char ch=s.charAt(i);
        if(st.isEmpty()){
            if(Character.isDigit(ch)){
                st.push(ch);
            }}
        else if(ch == ' '){
            st.push(0);
        }
        else {
            if (Character.isDigit(ch)){
                st.push(ch);
                rightOP=(int) st.pop();
                leftOP=(int) st.pop(); 
                leftOP=leftOP*10;
                leftOP = leftOP + rightOP;
                st.push(leftOP);
            }
        }
    if(CheckOP(ch)){

        switch(ch){
            case '+':result=leftOP+rightOP;
                break;
            case '-':result=leftOP-rightOP;
                break;
            case '*':result=leftOP*rightOP;
                break;
            case '/':result=leftOP/rightOP;
                break;
            case '%':result=leftOP%rightOP;
                break;
            case '>':result=1;
                break;
            case '<':result=1;
                break;
            case '=':result=1;
                break;
            default:result=0;
            }st.push(result);
        }

    }result=(int) st.pop();
return(result);
}

}