ArrayIndexOutOfBounds при попытке добавить в список из массива строк - PullRequest
0 голосов
/ 08 октября 2018

У меня одна проблема, которая мешает работе всего моего кода.У него ошибка индекса массива вне границ, но он идеально соответствует массиву файлов, поэтому я не уверен, в чем проблема ..

public void Menu() {
    prompt.welcomeMsg();
    prompt.nGramOptionMsg();
    String userInput = input.next();
    while (userInput.charAt(0) != 's' || userInput.charAt(0) != 'S') {
        if (userInput.charAt(0) == 'n' || userInput.charAt(0) == 'N') {
            prompt.nGramLengthMsg();
            int userIntut = input.nextInt();
            nGram = new NGram(userIntut);
            prompt.fileUpload();
            String userFilePut = input.next();
            FileOpener file = new FileOpener(userFilePut);
            String[] fileArray = file.openFile();
            for (int i = 0; i < fileArray.length; i++) {
                String[] splitedFileArray = fileArray[i].split("\\s+");
                list.add(splitedFileArray[i]);
            }
            String[] listToStringArray = (String[]) list.toArray(new String[0]);
            String[] nGrams = nGram.arrayToNGram(fileArray);
            for (int i = 0; i < nGrams.length; i++) {
                Word word;
                if (!hashMap.containsKey(nGrams[i])) {
                    word = new Word(nGrams[i], 1);
                    hashMap.put(word.getNGram(), word);
                } else {
                    Word tempWord = hashMap.remove(nGrams[i]);
                    tempWord.increaseAbsoluteFrequency();
                    hashMap.put(tempWord.getNGram(), tempWord);
                }

            }

            HashMapFiller fill = new HashMapFiller();
            fill.hashMap(hashMap);
            fill.print();

            prompt.goAgain();
        }

}

Проблема возникаеткогда list.add пытается добавить splitedFileArray.Я попытался сделать fileArray.length-1, но у него была похожая ошибка, кроме -1. ​​

1 Ответ

0 голосов
/ 08 октября 2018

Основной причиной этой проблемы является то, что вы пытаетесь получить доступ к массиву в следующей строке.Что на самом деле происходит за кулисами, так это то, что вы на самом деле пытаетесь получить доступ к массиву неизвестного размера, который возвращается методом split().размер возвращаемого массива может быть меньше указанного индекса (в вашем случае i).

list.add(splitedFileArray[i]);

Вы можете решить эту проблему следующим образом ..

for (int i = 0; i < fileArray.length; i++) {
    String[] splitedFileArray = fileArray[i].split("\\s+");
    list.addAll(Arrays.asList(splitedFileArray));
}

Надеюсь, этот ответ поможет вам решить вашу проблему ...

...