Получение arrayindexoutofboundsexception при выполнении подсчета не повторяющейся операции sub str - PullRequest
0 голосов
/ 06 ноября 2019

Я получаю ArrayIndexOutOfBoundsException при выполнении кода ниже. Я пытаюсь вычислить общее количество не повторяющихся значений подстроки в строке. Я добавил try catch чтобы остановить это исключение. В основном я в очереди s2[j]=s2[k];.

public class SubStrLen2 {
    public static int StrLen1(String s) {
        int n = s.length();
        int count=0, flag=0;
        char[] s1 = s.toCharArray();
        char[] s2 = s1;
       // char[] s3;
        for(int i=0; i<=n;i++)
        {
                for(int j =0;j<i; j++)
                {
                    if(s1[i] == s2[j])
                    {
                        if(i!=j) {
                        flag = 1;
                        for(int k=j+1;k<=n;k++,j++)
                        {
                            s2[j]=s2[k];
                        }
                        break;
                        }
                    }
                }
                if(flag==0)
                {
                    //s3[i]=s1[i];
                    count ++;
                }
                flag =0;        
                }
        return count;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String sc = "GreekGods";
        try {
        System.out.println("Length of the Sub str"+ StrLen1(sc));
        }catch(ArrayIndexOutOfBoundsException e) {
            System.out.println("Error in Array");
        }

    }
}

1 Ответ

1 голос
/ 06 ноября 2019

Есть несколько наблюдений, начало индекса цикла с 0 должно заканчиваться на общая длина -1 , поэтому, если n - ваша длина массива, ваш код должен быть

  for(int i=0; i<n;i++)

та же проблема в

for(int k=j+1;k<=n;k++,j++)

, здесь вы не только используете знак = , который вызовет ArrayIndexOutOfBoundsException, но вы также увеличиваете j , который является частьюродительский цикл, если он не предназначен, вы можете не получить желаемого результата.

...