所以我目前正在做一个使用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;
}
}
如果您还有其他任何需要,请随时询问
我应该为此创建两个堆栈吗?
答案 0 :(得分:0)
我会怎么做......
我会使堆栈节点能够保存char
或double
个数据值。 (请注意,这些实际上是盒装类型Character
和Double
。)
然后,节点类将有一个getValue()
方法,该方法返回值,并适当地转换为double
类型。这将确保算术运算正常工作。