2014-02-27 1 views
0

그래서 저는 현재 숙제를 위해 Postfix와 Infix 표현식에 Stack을 사용하고 있습니다. 내 질문은, 어떻게 내가 밀어 넣을 수 있도록 스택을 설정 및 문자 및 두 번 팝업. 지금은 Postfix에서 중위가 올바르게 작동하도록 중급을 얻을 수 있지만 후미에 대한 총을 계산하려고하면 폭탄이됩니다. 지금은 문자 A-Z의 값을 저장할 배열을 사용하고 있습니다. 이것은 내 postFix 평가 함수입니다.숯과 이중 스택

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(); 

이것은 내 노드 클래스

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

내가 스택 노드 중 하나 char 또는 double 데이터 값을 보유 할 수있게 만들 것입니다 ... 나는 그것을 할 것입니다 방법입니다. (이 실제로 박스 타입 CharacterDouble 될 것이라고합니다.)

노드 클래스는 다음 적절하게 double 형으로 변환 된 값을 반환하는 getValue() 방법이있을 것입니다. 이렇게하면 산술 연산이 올바르게 작동합니다.