2017-03-08 13 views
0

rpn計算のためにアンドロイドでコードを書いていますが、角括弧の中に演算子があるとクラッシュします。例えば(89 + 7)がクラッシュしたが(8)7つの出力15 は、これは私が後置への変換中置に使用する方法である:最初にあなたがスタック要素をのぞくと、次にチェックするのでRpn変換で空のスタック例外

 private static List<String> convert(String input) { 
      int p = 0; 
      String pfb = ""; 
      Stack<Character> chara = new Stack<>(); 
      List<String> pfa = new ArrayList<>(); 
      for (int i = 0; i < input.length(); i++) { 
       char ch = input.charAt(i); 
       if (ch == '+' || ch == '-' || ch == '*' || ch == '/') { 
        if (pfb.length() > 0) { 
         pfa.add(pfb); 
        } 
        pfb = ""; 
        if (chara.empty()) { 
         chara.push(ch); 
        } else { 
         Character chTop = (Character) chara.peek(); 
         if (chTop == '*' || chTop == '/') 
          p = 1; 
         else if (chTop == '+' || chTop == '-') 
          p = 0; 
         if (p == 1) { 
          if (ch == '+' || ch == '-') { 
           pfa.add(String.valueOf(chara.pop())); 
           i--; 
           Log.d("pfa", "" + input.length() + "" + i); 
          } else { // Same 
           pfa.add(String.valueOf(chara.pop())); 
           i--; 
          } 
         } else { 
          if (ch == '+' || ch == '-' && chara.peek() != '(') { 

           pfa.add(String.valueOf(chara.pop())); 
           chara.push(ch); 
          } else 
           chara.push(ch); 
         } 
        } 
       } else if (ch == '(') { 
        chara.push(ch); 
    //    Log.d("St",""+chara.peek()); 


       } else if (ch == ')') { 

    `//Code crashes here`   while (chara.peek() != '(' && !chara.empty()) { 
         pfa.add(String.valueOf(chara.pop())); 
        } 
        if (!chara.empty() && chara.peek() != '(') 
         return null; // invalid expression 
        else 
         chara.pop(); 


       } else { 
        pfb += ch; 
       } 
       // Log.d("pfa",""+pfa+""); 

      } 
      return pfa; 
     } 

答えて

0

あなたのコードがクラッシュ空の状態。それは のようにしばらく(!chara.empty()& & chara.peek()!= '(')

+0

はそれを変更する必要がありますが、それはまだポップというよりもかいま見に.Nowをクラッシュ 。 –

+0

あなたがしようとしているので、空のスタックから要素をポップします。else else else else if(!chara.empty()&& chara.peek()== '(')chara.pop(); –

関連する問題