Java中的While循环不会对文档的最后一行执行操作
我有一个文本文档,如下所示:
2 2 1 4 2 8
2 4 1 4 2 8
2 6 1 4 2 8
我想找到第二列(2,4,6)中所有数字的平均值。我写了一个while循环,我认为应该这样做。totalVal是所有加在一起的数字的总值,totalNum是数字的总数
String line = data.nextLine();// read one line into a String
while (data.hasNextLine()) {
String[] field = line.split(" ");
totalVal += Double.parseDouble(field[1]);
totalNums += 1;
line = data.nextLine();
}
System.out.println(totalVal / totalNums);
问题是,我得到的答案返回的值是3,这意味着它只取文档中前两行文本的平均值,而忽略了第三行
有人能告诉我如何更改循环,使其在文本的第三行中也添加值吗
# 1 楼答案
不清楚你为什么在循环前读一行
如果在循环的第一步读取一行,那么所有的行都将被正确处理
# 2 楼答案
相信JVM:读了第三行之后,就没有下一行了。它停下来是因为你让它停下来
试着这样做:
# 3 楼答案
当您位于前最后一行时,使用
line = data.nextLine();
检索最后一行,然后立即检查while
循环中的data.hasNextLine()
。由于到达了最后一行,因此返回false
,然后退出循环将代码更改为:
这首先检查是否有下一行,然后得到它
现在,超级Java 8为这一点提供了一个系列:
# 4 楼答案
如果你在最后打印出
line
,你会发现最后一行在那里。您捕获了最后一行,清空文件,然后在清空文件后检查是否还有。你要么这样做然后移除循环外的
line = nextLine()
,或者将其转换为do while循环# 5 楼答案
使用BufferedReader(br)可以读取文档的所有行,如下所示: