2016-12-25 27 views
0

Вот мой код для преобразования инфикса в выражение posfix. Проблема заключается в методе преобразования. Я получаю ошибку на линии 21.JAVA-Why/Где я получаю индекс массива из связанной ошибки, пытаясь скрывать инфикс, чтобы опубликовать исправление?

Error-Ab + Исключение в потоке "главный" java.lang.ArrayIndexOutOfBoundsException: 3> = 0

в java.util.Vector.elementAt (Unknown Source)
в infixpostfix.conversion (infixpostfix.java:22)
в infixpostfix.main (infixpostfix.java:77)

для текущего входного сигнала.

Я думаю, что эта ошибка появляется, потому что я пытаюсь получить доступ к i, когда она превышает длину моей строки. Но как это возможно, когда значение my i регулируется циклом for?

Code:- 

import java.util.Stack; 
public class infixpostfix { 

    Stack<Character> st = new Stack<Character>(); 

    void conversion(String e){ 


     for(int i = 0 ; i < e.length() ; i++){ 

      if(isOp(e.charAt(i))){ 

       if(st.isEmpty()){ 

        st.push(e.charAt(i)); 
       } 

       else{ 
        while(!st.isEmpty() && checkPrec(st.peek())<=checkPrec(e.charAt(i))){ 
         System.out.println(st.pop()); 
        } 
        st.push(st.elementAt(i)); 
       } 
      } 

      else{ 

       System.out.print(e.charAt(i)); 
      } 

     } 

     while(!st.isEmpty()){ 

      System.out.print(st.pop()); 

     } 
    } 

    int checkPrec(char o){ 

     switch(o){ 

     case '+': 
     case '-': 

      return 1; 

     case '*': 
     case '/': 

      return 2; 

     default: 

      return -1; 
     } 
    } 

    boolean isOp(char c){ 

     if(c=='+' || c=='-' || c=='/' || c=='*'){ 

      return true; 
     } 

     else{ 

      return false; 
     } 
    } 

    public static void main(String args[]){ 

     infixpostfix obj = new infixpostfix(); 

     obj.conversion("a+b-c/d*f"); 
    } 
} 
+1

'st.push (st.elementAt (i));' - что вы пытаетесь сделать здесь? – GurV

ответ

0

Из чего я понимаю, i представляет собой индекс в строке. Однако здесь:

st.push(st.elementAt(i)); 

Вы используете в указателе для своего вектора. Я предполагаю, что вы мясо:

st.push(e.charAt(i)); 
+0

Спасибо ... Это прослушивало меня с 30 минут :) –

 Смежные вопросы

  • Нет связанных вопросов^_^