2011-07-24 8 views
4

私は本質的にshunting yardアルゴリズムですが、RPNの代わりに接頭辞を動かすことに取り組んでいます 私はかっこを維持しようとしています。 Currenntly私のコードはShunting Yardでの括弧の保護

 String s = inFixList.get(i); 
     Stack<Character> opStack = new Stack<Character>(); 
     Stack<Character> solutionStack = new Stack<Character>(); 
     String solution = ""; 

     for(char c : s.toCharArray()) 
     { 
      if(Character.isLetter(c)||Character.isDigit(c)) 
      { 
       solutionStack.push(c); 
      } 
      else if(c == '(') 
      { 
       opStack.push(c); 
       solutionStack.push(')'); 
      } 
      else if(c == ')') 
      {     
       while(opStack.peek() != '(') 
       { 
        solutionStack.push(opStack.pop()); 
        solutionStack.push('('); 
       } 
       opStack.pop(); 
      } 
      else if (!Character.isSpaceChar(c)) 
      { 
       if(opStack.isEmpty()) 
       { 
        opStack.push(c); 
       }      
       else if(opStack.peek()!='(' &&(OPERATORS.indexOf(c) < OPERATORS.indexOf(opStack.peek()))) 
       { 
        opStack.push(c); 
       } 
       else if(!opStack.isEmpty()&&(opStack.peek()!='(')) 
       { 
        solutionStack.push(opStack.pop()); 
        solutionStack.push('('); 
        opStack.push(c); 

       } 
       else 
       { 
        opStack.push(c); 
       } 

      } 
     } 
     while(opStack.size() != 0) 
     { 
      solutionStack.push(opStack.pop()); 
      solutionStack.push('('); 
     } 
     while(!solutionStack.isEmpty()) 
     { 
      solution+=solutionStack.pop(); 
     } 

     System.out.println("Final Answer!"+solution); 

これは正しく左括弧を出力しますが、閉じ括弧の一種のみです。誰が私がそれらを追加すべきか考えている人はいますか?私は、これが問題であるかどうかわからないんだけど、私はあなたが

else if(c == '(') 
{ 
    opStack.push(c); 
    solutionStack.push(')'); 
} 

ドを書いたコードの中で気づい

答えて

0

...私はそれがどこに行く最後の論理的なステップを取得することに欠けている誓いますあなたは本当にここに閉じ括弧を押したいのですか?私が間違っているかもしれないけれども、開いた括弧を押すことはずっと妥当と思われます。