开发者

Need help in implementing Java Algorithm on Postfix Evaluation

I've tried writing this code from scratch, coding, and running it but it just doesn't seem to work. This was assigned as lab work in class. The requirements are: Implementing a postfix evaluation with the use of a stack and stack operations (user-defined). I think the algorithm of my program is right, but it always gives me the wrong answer. Here is my code.

public class StackApplication {

    public static class Stack<T> {

        private int top = 0;
        private final static int stackMax=100;
        // highest index of stk array
        private Object[] stk = new Object[stackMax+1];
        //Elements must be cast back.

        public Stack() { // constructor
        }

        public boolean isEmpty(){
            if (top==0) return true;
            else return false;
        }

        public void push(T el) {
            if(top==stackMax)
                System.out.println("Stack push overflow error");
            else top=top+1;
            stk[top]=el;
        }

        public T pop(){
            if(isEmpty()){
                System.out.println("Stack push underflow error");
                return null;
            }
            else top=top-1;
            return(T)stk[top+1];
        }

        public T top(){
            if(isEmpty()){
                //System.out.println("Stack empty");
                return null;
            }
            else return (T)stk[top];
        }
    }
    public static boolean isOperator(char c){
        return(c=='+' || c=='-' || c=='/' || c=='*' || c=='^');
    }
    public static double evaluate(double x, char o, double y) {

        double result=0;
        switch(o) {
            case '+' : result=x+y; break;
            case '-' : result=x-y; break;
            case '*' : result=x*y; break;
            case '/' : result=x/y; break;
    开发者_如何转开发        case '^' : result=Math.pow(x, y);  break;
            default : break;    
        }
        return result;
    }

    public static void main(String[] args) {
        Scanner console=new Scanner(System.in);
        Stack<Double> s=new Stack<Double>();

        System.out.println("Input Postfix form to evaluate:");
        String inp=console.nextLine();
        char[] chararray=inp.toCharArray();
        double b,a;

        for(int i=0; i<chararray.length; i++) {
            if(!isOperator(chararray[i]))
                s.push((double)chararray[i]);
            else {
                b=s.pop();
                a=s.pop();
                double c=evaluate(a, chararray[i], b);
                s.push(c);
            }
        }
        System.out.println(" " +s.pop());
    }
}

Sample Output: Input Postfix form to evaluate:

23+ (Input)
101.0  (Output)
5.0 (Expected output) 


The problem is here: s.push((double)chararray[i]);. You can't convert char to double this way. You are now taking the ascii code of 2 and 3.

50(ascii code of 2) + 51(ascii code of 3) = 101

Do it like this: s.push((double)(chararray[i] - '0'));


Your are doing the addition of the ASCII codes for 2 and 3, not of 2 and 3.

The code for 2 is 50 and for 3 is 51, so your out is 101, which is correct in this case.

When you push, push chararray[i]-'0'. This will solve your problem.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜