我的代码不断超出范围

时间:2018-02-09 20:13:48

标签: java

我试图找到子串中所有可能的回文。我创建了一个palindrome方法,但由于某种原因,我的代码超出了界限而不是在最后一个字母后停止。

public static boolean palindrome(String input){

    int i = input.length(); 
    int k; 
    char[] palindrome_arr = new char[i];

    char[] palindrome_arr1 = new char[i];
    boolean result;

    palindrome_arr = input.toCharArray(); 
    for(k = 0; k<(i);k++)
    {
        //  System.out.println(palindrome_arr[k]);
        palindrome_arr1[k]=palindrome_arr[(palindrome_arr.length-1)-k]; 
        //System.out.println(palindrome_arr1[k]); 
        //   System.out.println(palindrome_arr[(palindrome_arr.length-1)-k]); 
    }
    result = Arrays.equals(palindrome_arr, palindrome_arr1);//checks if its a //palindrome
    if (result==true)
    {
        return true; 
    }
    else 
        return false; 
}

for (String sub11 : sub1) {
    System.out.println(sub11);
    String sub2;
    sub2 = sub11;
    for (int q = 0; q < sub2.length()-1; q++)
    {                          
        sub = sub2.substring(q, sub2.length()-q);
        //  System.out.println(sub);
        If(sub.length() > 1){
            if(palindrome(sub) == true){
                System.out.println(sub);
                counter++;
                hm.put(counter, sub);
            }
        }

    }

1 个答案:

答案 0 :(得分:-1)

您的错误就在这里。

sub = sub2.substring(q, sub2.length()-q);

例如,sub2.length为5.在第4次迭代时,q为3,(sub2.length-q)为2,方法中的值为sub2.substring(3,2); < / p>

第一个值不应大于第二个值,如果大于第二个值,则它将通过“超出范围”例外。

我给了你一个基本的想法,现在改变这个代码就可以了。