为什么我的程序读取的比实际少一行?为什么我的阵列只接收一个?

  • 本文关键字:阵列 一个 一行 程序 读取 java list
  • 更新时间 :
  • 英文 :


在我的高中计算机科学课上,我必须读取一个带有标记的文本文件,然后创建一个包含这些标记的数组(以便以后可以操作它们(。当我尝试读取程序中的行数时,它读取的行数比实际少一行,当我输出数组时,它只包含写入它计数的行数的"1.00"(这是不正确的(。

import java.awt.*;
import java.io.*;
import hsa.Console;
public class Assignment3Q3
{
static Console c;
public static void main (String[] args) throws IOException
{
c = new Console ();
BufferedReader input = new BufferedReader (new FileReader ("marks.txt"));
String mark = input.readLine ();
int lines = 0;
while (input.readLine () != null)
lines++;
input.close ();
c.println (lines);
double[] marks = new double [lines];
int count = 0;
BufferedReader input1 = new BufferedReader (new FileReader ("marks.txt"));

while (input1.readLine () != null)
{
marks [count] = Double.parseDouble (mark);
count += 1;
if (count == lines)
{
break;
}
}
for (int x = 0 ; x < lines ; x++)
{
c.println (marks [x]);
}
}
}

在第二个 while 循环中,您始终将变量的解析版本分配给marks数组元素mark。但是您只在代码中设置了一次mark变量,这是文件的第一行。

无论如何,无需两次读取文件(一次用于获取行数,然后存储实际的行内容(,您可以使用List而不是数组在单个读取周期中执行此操作。

try (BufferedReader input = new BufferedReader (new FileReader("src/marks.txt"))) {
List<Double> marks = new ArrayList<>();
String line;
while ((line = input.readLine()) != null) {
marks.add(Double.parseDouble(line));
}
System.out.println(marks);
} catch (IOException e) {
e.printStackTrace();
}

如果您真的想将这些标记放入数组中,则可以将上面的列表还原为数组,如下所示。

Double[] marksArray = marks.toArray(new Double[marks.size()]);

同样正如我在上面的代码片段中所做的那样,当您创建 AutoCloseable 资源(如BufferedReaderFileReader(时,最好使用"使用资源尝试"方法。这样,就不必在代码中显式关闭它们。

为什么要分两步分离?这很容易出错。count当前行上方的marks数组中的值均未被访问。因此,将双打存储在动态增长的ArrayList<Double>中,并一步完成工作。

最新更新