堆栈与char和double

时间:2014-02-27 21:15:30

标签: java linked-list stack evaluation postfix-notation

所以我目前正在做一个使用Stack for Postfix和Infix表达式的家庭作业。我的问题是,我如何设置我的堆栈,以便我可以推送和弹出字符和双打。现在我能够让Infix到Postfix正常工作,但是当我尝试计算postfix的总数时它就会发生炸弹。现在我正在使用一个数组来存储字母A-Z的值。这是我的postFix eval函数。

public double postFix(String infix, double[] numbers) throws Exception{
    Stack myStack=new Stack();
    for(int i=0; i<infix.length(); i++){
        char ch=infix.charAt(i);
        if(ch=='+'){
            char one=(char) myStack.pop();
            char two=(char) myStack.pop();

            double first=numbers[one-65], second=numbers[two-65];
            double temp=first+second;
            myStack.push((char) temp);
        }
        else if(ch=='-'){
            char one=(char) myStack.pop();
            char two=(char) myStack.pop();

            double first=numbers[one-65], second=numbers[two-65];
            double temp=first-second;
            myStack.push((char) temp);              
        }
        else if(ch=='*'){
            char one=(char) myStack.pop();
            char two=(char) myStack.pop();

            double first=numbers[one-65], second=numbers[two-65];
            double temp=first*second;
            myStack.push((char) temp);              
        }
        else if(ch=='/'){
            char one=(char) myStack.pop();
            char two=(char) myStack.pop();

            double first=numbers[one-65], second=numbers[two-65];
            double temp=first/second;
            myStack.push((char) temp);              
        }
        else if(ch=='^'){
            char one=(char) myStack.pop();
            char two=(char) myStack.pop();

            double first=numbers[one-65], second=numbers[two-65];
            double temp=Math.pow(first, second);
            myStack.push((char) temp);              
        }
        else{
            myStack.push(ch);
        }
    }
    return myStack.pop();

这是我的Node类

private class Node{
    protected char data;
    protected Node next;

    private Node(){
        this.data=(Character) null;
        this.next=null;
    }

    private Node(char data, Node next){
        this.data=data;
        this.next=next;
    }
}

如果您还有其他任何需要,请随时询问

我应该为此创建两个堆栈吗?

1 个答案:

答案 0 :(得分:0)

我会怎么做......

我会使堆栈节点能够保存chardouble个数据值。 (请注意,这些实际上是盒装类型CharacterDouble。)

然后,节点类将有一个getValue()方法,该方法返回值,并适当地转换为double类型。这将确保算术运算正常工作。