Исключение в потоке "main" java.lang.IndexOutOfBoundsException: Индекс: 20, Размер: 20

Я пытаюсь написать код lz78 в качестве школьного проекта, но продолжаю получать эту ошибку:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 20, Size: 20

Вот код:

public class LZ88 {
    ArrayList input = new ArrayList();
    ArrayList stored = new ArrayList();
    Iterator counter = input.iterator();
    int count=0;
    int lz78(String x)
    {
        int length=x.length();
        for(int i=0;i<x.length();i++)
        {
            input.add(x.charAt(i));
        }
        for(int i=0;i<=input.size(); i++)
        {
            if (stored.contains(input.get(i))==true)
            {
                String str ;
                StringBuilder sb = new StringBuilder();
                sb.append(input.get(i));
                sb.append(input.get(++i));
                str=sb.toString();
                while(stored.contains(str)==true)
                {
                    sb.append(input.get(++i));
                    str=sb.toString();

                }
                stored.add(str);
                System.out.println(stored);
            }
            else
            {
                stored.add(x.charAt(i));
                System.out.println(stored);
            }
        }
        return 0;
    }
    public static void main(String[] args) {
        String x  = "abaababaababbbbbbbba";
        LZ88 ob = new LZ88();
        ob.lz78(x);
    }

}

В какой строке возникает эта ошибка? Что такое трассировка стека? Пожалуйста, редактировать свой ответ и добавьте трассировку стека.

Johannes Kuhn 19.05.2018 22:53

Нет смысла сравнивать логическое значение с истиной, как это делаете вы. Какова бы ни была его ценность на самом деле, неважно, сравниваете вы ее или нет. например if (stored.contains(input.get(i))==true) функционально идентичен if (stored.contains(input.get(i)))

Dragonthoughts 19.05.2018 23:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
269
1

Ответы 1

Заменить for(int i=0;i<=input.size(); i++) на for(int i=0;i<input.size(); i++)

@Mohamed Mamdoh Если мой ответ соответствует вашему вопросу, пожалуйста, примите ответ, щелкнув пустую галочку рядом с моим ответом, которая находится чуть ниже стрелки VoteDown, чтобы галочка стала зеленой. Как принять: meta.stackexchange.com/questions/5234/…

Andrei Suvorkov 24.05.2018 16:27

Другие вопросы по теме