2014-11-19 5 views
1

일련의 문자열을 형식화하는 코드를 작성하려고합니다. (조금 전에 게시했지만 몇 분 후에 삭제 한 것으로 생각하여 삭제했습니다. 에서 충분한 노력). "범위를 벗어난 색인"오류가 계속 발생하기 때문에 지금 다시 게시하고 있지만 수정 방법은 확실하지 않습니다.범위를 벗어난 색인에서 벗어날 수 없음

"범위 밖의 오류를 방지해야하는"if 문에서 생각할 수있는 모든 것을 래핑하려고했지만 도움이되지 않습니다!

잘못된 것이 있습니까?

(참고 : ExpressionTools.isOp (문자)가 true 또는 false가 문제의 문자가 일명 연산자인지 여부에 따라 반환하는 방법입니다 : +, -, *, /)

public static List<String> postfix = new ArrayList<String>(); 

public static String result; // the result of corrected string 

// corrects formating in postfix string if any errors, enters into postfix 
// array 
public static void spaces(String a, int x) { 
    StringBuilder b = new StringBuilder(a); 

    for (int i = x; i < b.length(); i++) { 
     if (b.charAt(i) == ' ') { 
      while (b.charAt(i + 1) == ' ') { 
       b.deleteCharAt(i + 1); 
      } 
      result = b.toString(); 
      } 
     if (ExpressionTools.isOp(b.charAt(i))) { 
      if (i+1 == 0) break; 
      else{ 
       while (ExpressionTools.isOp(b.charAt(i + 1))){ 
        b.insert(i+1, ' '); 
       } 
      } 
     } 
    } 
    System.out.println(result); 
    String r = b.toString(); 
    postfix.add(r); 

} 
+0

'b.charAt (i + 1)'는 문자열의 끝에있을 때, 즉'i'가'b.length() - 1'와 같을 때 범위를 벗어납니다. –

+0

'b.chartAt (i + 1)'이 길이에 도달 한 다음 하나 이상의 인덱스가 나올 것이기 때문에'i ochi

+1

'if (i + 1 == 0) break'에서이 문제를 피하십시오 -하지만 어떻게'i + 1 == 0'이 참일 수 있습니까? 이것은 오타 였습니까? – ajb

답변

2

당신이 루프 등이있을 때 :

for (int i = x; i < b.length(); i++) 

ix에서 따라서 b.length()-1

로 이동을 i+1는 도달 할 것 b.length(), 지점 b.charAt(i + 1)이 범위를 벗어났습니다. 예외가 발생합니다.

0

i까지 b.length()까지 그리고 if 조건에서이 오류의 원인이되는 char (i + 1)을 확인하십시오.

public class Test { 

    public static void main(String args[]) { 
     String s = "Strings are immutable"; 
     char result = s.charAt(8); 
     System.out.println(result); 
    } 
} 

출력 : 수 charAt()는 또한 예를 들어에만 제로 ... 부터 계산의 시작으로

0

b.charAt (I + 1) ... 당신을 위해 바운드 예외에서 인덱스를 일으키는 : a