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("--");
        }       
    }
}

我看到给定的异常错误,我不知道如何解决。我知道它的初学者问题,所以解释和你的答案真的会有所帮助。

编辑:

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

2 回答 2

3

数组在 Java(和大多数语言)中是从零开始的。这意味着,如果您有一个 size 数组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,这是超出范围的。

于 2013-09-22T05:57:54.713 回答
1

我认为这句话导致了异常:

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

当您使用 i 的值调用它时,它的值刚好小于长度。该语句将导致ArrayIndexOutOfBoundException. 数组的第一个和最后一个索引分别aa[0]a[a.length -1]

于 2013-09-22T05:58:06.510 回答