2013-09-22 121 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

數組是零基礎的Java語言(大多數語言)。這意味着,如果你有一個大小爲N的數組,那麼索引是從0 ... N - 1

你的問題是在這裏:

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

時會發生什麼i = ch.length - 1i + 1會是什麼?

讓我們假設ch.length爲10,意味着索引是從09,然後ch.length - 19,但i + 110,這是出界。

+0

如果數組長度爲10,意味着索引從0到9,對不對? –

+0

@CodeEnthusiastic當然,謝謝。 (因爲這個downvoting是多餘的恕我直言)。 – Maroun

+0

我編輯了你的答案,然後我看到我的編輯沒有了,你修改了你的答案。由於答案*失敗,因此被降級*如果你說索引從'0'到'10'。不過,現在看起來很有效。 –

1

我認爲這種說法是導致異常:

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

當你使用我的價值只是小於長度調用它。該聲明將導致ArrayIndexOutOfBoundException。數組a的第一個和最後一個索引分別是a[0]a[a.length -1]

+0

是的,這是罪魁禍首:) –

相關問題