2013-09-22 3 views
0
//Palindrone from a String 
public class Palindrome { 
    static int track = 0; 
    public static void main(String args[]){ 
     String str = "abcicbbcdefggfed "; 
     char[] charArray = str.toCharArray(); 
     Palindrome p1 = new Palindrome(); 
     p1.find_palindrome(charArray); 
    } 
    void find_palindrome(char[] ch){ 
     for(int i=0; i< ch.length; i++){ 
      if(ch[i] == ch[i+1]){ 
       checkPalindrome(ch, i, i+1);     
      } 
      else{ 
       checkPalindrome(ch,i-1,i+1); 
      } 
     }  
    } 
    void checkPalindrome(char[] c, int left, int right){ 
     int count=0,l=0,r=0; 
     while(left >= 0 && right <= c.length){ 
      while(c[left] == c[right]){ 
       left--; 
       right++; 
       count = count + 1; 
      } 
      break; 
     } 
     if(count > track){ 
      track = count; 
      l = left; 
      r = right; 
     } 
     if(count>1){ 
      for (int j=left+1;j<=right-1;j++){ 
       System.out.println(c[j]); 
      }  
      System.out.println("--"); 
     }  
    } 
} 

주어진 예외 오류가 표시되며 해결 방법을 알 수 없습니다. 그 초보자 질문을 알고, 당신의 대답과 함께 설명이 정말 도움이 될 것입니다.ArrayIndexOutOfBoundsException의 원인은 무엇입니까?

편집 :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 17 
    at Palindrome.find_palindrome(Palindrome.java:14) 
    at Palindrome.main(Palindrome.java:8) 

답변

3

배열은 제로 자바 (그리고 대부분의 언어)에서을. 즉, 크기가 N 인 배열의 인덱스는 0 ... N - 1입니다.

귀하의 문제는 여기에 있습니다 :

for(int i=0; i< ch.length; i++){ 
     if(ch[i] == ch[i+1]) 

i = ch.length - 1 무슨 일이? i + 1은 무엇이 될까요?

ch.length 10 가정하자 인덱스가 ch.length - 19입니다 다음, 0에서 9에 있음을 의미하지만 i + 1이 (가) 범위를 벗어났습니다 인 10이다.

+0

배열 길이가 10이면 인덱스가 0에서 9 사이임을 의미합니다. 맞습니까? –

+0

@CodeEnthusiastic 물론입니다, 고마워요. (이 때문에 IMHO 중복됩니다 downvoting). – Maroun

+0

나는 당신의 대답을 편집 한 다음 나의 편집이 사라지고 대답을 수정 한 것을 본다. 인덱스가 '0'에서 '10'까지이면 대답 *이 실패 *하기 때문에 Downvoted. 이제 upvoting. –

1

나는이 문장이 예외를 일으키는 생각 :

 if(ch[i] == ch[i+1]) 

당신이 길이보다 단지 적은 i 값을 사용하여 호출 할 때. 이 진술 문은 ArrayIndexOutOfBoundException이됩니다. 배열 a의 첫 번째 및 마지막 인덱스는 각각 a[0]a[a.length -1]입니다.

+0

네, 범인입니다 :) –

관련 문제