Java ArrayList缺少第一个值

Java ArrayList缺少第一个值,java,arrays,arraylist,Java,Arrays,Arraylist,我从文本文件中获取数据并将其放入ArrayList。但是,文本文件的第一行没有打印出来 public static void secondMain() { BufferedReader reader; var lines = new ArrayList<String>(); var rooms = new ArrayList<Room>(); try { reader = new BufferedReader(new Fil

我从文本文件中获取数据并将其放入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);
                            
        }
publicstaticvoidsecondmain(){
缓冲读取器;
var lines=newarraylist();
var rooms=newarraylist();
试一试{
reader=newbufferedreader(newfilereader(“rooms.txt”);
字符串行=reader.readLine();
while(行!=null){
line=reader.readLine();
行。添加(行);
}
reader.close();
对于(int i=0;i
很抱歉,这是我唯一能弄清楚如何显示文本文件格式的方法。

电流输出显示房间号102作为第一个房间,这显然是不正确的

如果有人能帮我弄清楚如何用与文本文件相同的方式格式化控制台输出,那也太好了。目前它在不同的行上显示每个单独的字符串/int等

谢谢


如果您需要更多信息,请询问!

这与
ArrayList
无关。您可以通过替换
行来重现问题。使用
System.out.println(line)
添加(line)
调用
readLine(),您将看到输出中缺少第一行。查看您对
readLine()的第一次调用
,在while循环之前。您测试该值是否为非null…这就是您使用它所做的一切(我的注释):

String line=reader.readLine();//读取值。。。
而(line!=null){//测试它是否为非null
line=reader.readLine();//然后忽略刚刚测试的值,
//通过阅读下一行。
行。添加(行);
}
然后再次调用
readLine()
。请注意,列表将始终以
null
值结尾(除非它是读取的第一行),因为循环实际上会说“我添加到列表中的最后一个条目不是null”。最简单的修复方法是交换循环中语句的顺序:

String line=reader.readLine();
while(行!=null){
行。添加(行);
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
}
在将第一行添加到列表中之前,请先阅读第一行,检查它是否为空,然后立即阅读第二行。只需切换顺序即可

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