Как правильно заполнить ArrayList типа ArrayList <String>? - PullRequest
0 голосов
/ 10 февраля 2020

Я студент APCSA и пытаюсь ответить на вопрос в учебнике. По сути, учитывая ArrayList из разных слов, мне нужно создать и вернуть ArrayList типа ArrayList с 26 «корзинами», каждое из которых содержит все слова, которые начинаются с «a», затем «b» и т. Д. До начала ArrayList полностью отсортирован по первой букве слова. Метод может только один раз проанализировать исходный ArrayList и не может его изменить. Теперь, когда мой код не работает, я получаю ошибку выхода за границы. Если кто-то может указать мне правильное направление, это было бы здорово, спасибо. Это то, что я имею в настоящее время, и я понятия не имею, если это даже близко к праву:

public static ArrayList<ArrayList<String>> sortWords(ArrayList<String> words)
{
    ArrayList<ArrayList<String>> buckets = new ArrayList<ArrayList<String>>(26);
    String letters = "abcdefghijklmnopqrstuvwxyz";


    for(int i = 0; i < 26; i++)
    {
        //keeps track of current letter in letters
        int let = 0;

        for(int word = 0; word < words.size(); word++)
        {
            //if first letter of current word equals letter for current bucket
            if(letters.substring(let,let+1).compareToIgnoreCase(words.get(word).substring(0, 1)) == 0)
                buckets.get(i).add(words.get(word));
        }
        let++;
    }

    return buckets;
}

1 Ответ

1 голос
/ 10 февраля 2020

«26» там просто говорит, что массив оптимизирован для обработки 26 элементов. Это все еще пустой массив с нулевыми элементами. В верхней части строки для (26) l oop попробуйте добавить buckets.add(new ArrayList<>());.

Кроме того, вы не делаете то, что задает вопрос; Вы зацикливаете ввод 26 раз, вопрос в том виде, в котором он задан, требует от вас oop этого только один раз. (и поскольку это домашнее задание, твоему образованию это не поможет, если я поймаю эту фи sh для тебя).

...