Как исправить ошибку 'ava.lang.ArrayIndexOutOfBoundsException: индекс 1 за пределами длины 1' в Java - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь создать экземпляр класса "PhoneEntry", используя данные, извлеченные из файла .txt. .Split (), кажется, эффективно создает массив (информацию), который содержит три значения из каждой строки в документе (имя, фамилия и номер телефона), но я получаю ошибку выхода за границы при попытке создатьэкземпляр класса "PhoneEntry", использующий формулу array [index] для вызова каждого значения. Мне удалось распечатать все индексы в массиве информации, чтобы они содержали правильные значения, но не удалось создать новый "PhoneEntry" с ними.

Пока у меня есть ...

1) Распечатал все значения, чтобы убедиться, что цикл чтения файлов выполняет свою работу в правильной сборке массива "info"

2) Распечатаны длины информационных массивов. Возвращено пять «3» и «1». Должно быть только 5 массивов, потому что в phonebook.txt есть только 5 строк с содержимым, но, может быть, есть секретный файл '/ n' или что-то еще, если так, как бы я удалил этот символ?

PhoneBook()   // constructor for the phone book
    {
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\Users\\HP\\Desktop\\javaprojects\\phonebook2\\phonebook.txt");
            String line;
            try {
                while ((line = bufferedReader.readLine()) != null) {
                    String[] info = line.split(" ");
                    System.out.println(info[0] + " " + info[1] + " "+info[2]);
                    phoneBook.add(new PhoneEntry(info[0], info[1], info[2]));
                }
                bufferedReader.close();
            } catch (IOException e2){
                e2.printStackTrace();
            }
        } catch (FileNotFoundException e1){
            e1.printStackTrace();
        }


    }

.txt файл:


Ali Katt (312)223-1937
Ima Knob (860)399-3044
Jo King (913)883-2874
Stew Pid (651)698-4631
Ug Lee (815)439-9271

Точное сообщение об ошибке:

java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
    at PhoneBook.<init>(PhoneBook.java:16)
    at PhoneBookTester.main(PhoneBookTester.java:10)

Строка 16 относится к оператору печати, но все значения фактически распечатаны правильно, включая последнееиндекс (2). До появления оператора print ошибка ссылалась на новый phoneEntry.

Мне нужно, чтобы он фактически создал экземпляр «PhoneEntry», а также добавил его в список массивов «phoneBook»

1 Ответ

0 голосов
/ 07 октября 2019

Ваша программа предполагает, что в каждой строке всегда есть по крайней мере 2 пробела.

Если есть пустая строка или строка, содержащая менее 2 пробелов, вы пытаетесь получить значения вinfo, которые не существуют, следовательно, ArrayIndexOutOfBoundsException.

if (info.length == 3) {
   System.out.println(info[0] + " " + info[1] + " " + info[2]);
   phoneBook.add(new PhoneEntry(info[0], info[1], info[2]));
}
...