2013-09-22 5 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?

Edit:

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

ответ

3

Массивы нуля в Java (и большинство языков). Это означает, что если у вас есть массив размером 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, означает, что индексы от 0 к 9, то это ch.length - 19, но это i + 110, который выходит за пределы границ.

+0

Если длина массива равна 10, значит, что индексы от 0 до 9, правильно? –

+0

@CodeEnthusiastic Конечно, спасибо. (Перемещение из-за этого избыточно ИМХО). – Maroun

+0

Я отредактировал ваш ответ, тогда я вижу, что мое редактирование исчезло, и вы пересмотрели свой ответ. Downvoted, потому что ответ * сбой *, если вы говорите, что индексы от '0' до' 10'. Но теперь выжить. –

1

Я думаю, что это утверждение вызывает исключение:

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

при вызове его с помощью значения я просто меньше, чем длина. Это заявление вызовет ArrayIndexOutOfBoundException. Первый и последний индекс массива a - a[0] и a[a.length -1] соответственно.

+0

Да, это преступник :) –

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