Я беру данные из текстового файла и помещаю их в 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 как первую комнату, что явно неверно.
Если бы кто-нибудь также мог помочь мне понять, как форматировать вывод моей консоли так же, как текстовый файл, это тоже было бы здорово. в настоящее время он отображает каждую отдельную строку/целое число и т. д. в другой строке.
Спасибо.
Если вам нужна дополнительная информация, пожалуйста, просто спросите!
Это не имеет ничего общего с 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();
}