Java ArrayList отсутствует первое значение

Я беру данные из текстового файла и помещаю их в ArrayList. Однако первая строка текстового файла не распечатывается.

public static void secondMain() {
    BufferedReader reader;
    var lines = new ArrayList<String>();
    var rooms = new ArrayList<Room>();
    try {
        reader = new BufferedReader(new FileReader("rooms.txt"));
        String line = reader.readLine();
        while (line != null) {
            line = reader.readLine();
            lines.add(line);
        }
        
        reader.close();
        
        for (int i = 0; i < lines.size() - 1; i++) {
            String[] words = lines.get(i).split(" ");
            var room = new Room();
            room.RoomNumber = Integer.parseInt(words[0]);
            room.Type = (words[1]);
            room.Price = Double.parseDouble(words[2]);
            room.Bool1 = Boolean.parseBoolean(words[3]);
            room.Bool2 = Boolean.parseBoolean(words[4]);
            room.Availability = (words[5]);
            rooms.add(room);
            
        }



        for(int i = 0; i < rooms.size(); i++) {
            System.out.println(rooms.get(i).RoomNumber);
            System.out.println(rooms.get(i).Type);
            System.out.println(rooms.get(i).Price);
            System.out.println(rooms.get(i).Bool1);
            System.out.println(rooms.get(i).Bool2);
            System.out.println(rooms.get(i).Availability);
                            
        }

Извиняюсь за изображение, это был единственный способ понять, как показать форматирование текстового файла.

Текущий вывод отображает номер комнаты 102 как первую комнату, что явно неверно.

Если бы кто-нибудь также мог помочь мне понять, как форматировать вывод моей консоли так же, как текстовый файл, это тоже было бы здорово. в настоящее время он отображает каждую отдельную строку/целое число и т. д. в другой строке.

Спасибо.

Если вам нужна дополнительная информация, пожалуйста, просто спросите!

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

Ответы 2

Ответ принят как подходящий

Это не имеет ничего общего с ArrayList. Вы можете воспроизвести проблему, заменив вызов lines.add(line) на System.out.println(line), и вы увидите, что в выводе отсутствует первая строка. Посмотрите на свой первый вызов readLine() перед циклом while. Вы проверяете, что значение не равно нулю... и это все, что вы с ним делаете (комментарии мои):

String line = reader.readLine(); // Read the value...
while (line != null) {           // Test for it being non-null
    line = reader.readLine();    // Then ignore the value you've just tested,
                                 // by reading the next line.
    lines.add(line);
}

Затем вы снова звоните readLine(). Обратите внимание, что ваш список всегда будет заканчиваться значением null (если только это не первая прочитанная строка), потому что ваш цикл фактически говорит «пока последняя запись, которую я добавил в список, не равна нулю». Самое простое исправление — поменять порядок операторов в вашем цикле:

String line = reader.readLine();
while (line != null) {
    lines.add(line);
    line = reader.readLine();
}

Теперь вы добавляете строку сразу после проверки того, не является ли она нулевой, прежде чем читать следующую строку.

Проблема здесь:

String line = reader.readLine(); // you read the first line
while (line != null) {
    line = reader.readLine(); // read second line
    lines.add(line); // add second line
}

Вы читаете первую строку, проверяете, не null ли это, а затем сразу же читаете вторую строку, прежде чем добавить ее в список. Все, что вам нужно сделать, это изменить порядок.

String line = reader.readLine();
while (line != null) {
    lines.add(line);
    line = reader.readLine();
}

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