为数组分配值会引发错误

时间:2020-05-06 02:39:21

标签: java

对不起,标题不好;我很难解释。我正在使用品牌,型号,数字格式的文本文件。在文本文件中,为此有多行。当我的程序启动时,将使用文件的输入调用构造函数,并读取文件的行,同时将值分配给添加到数组中的对象。奇怪的是,此代码仅在某些时间有效。例如,当我只有两行make,model,number时,它将始终如一地工作。但是,当我添加三行时,会引发错误。有时,我会重新运行该程序或添加第四行,它将起作用。我不知道为什么会这样。任何帮助将不胜感激!:

ArrayList<Car> carArray = new ArrayList<Car>();

public CarDealershipSystem(File carFile, File associateFile) {
    //carFile
    try (BufferedReader br = new BufferedReader(new FileReader(carFile))) {
        String line;
        while((line = br.readLine()) != null) {
            String[] lineArray = line.split(",");
            if (lineArray.length>=3) {
                Car car = new Car();
                car.setMake(lineArray[0]);
                car.setModel(lineArray[1]);
                car.setVin(lineArray[2]);
                carArray.add(car);
            }
            else {
                System.err.printf("%sis not a car.%n", line);
            }
        }   
    }catch(IOException e) {
        e.getLocalizedMessage();
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:2)

每次调用readLine()时,它会占用一行。您需要存储该行,否则它不会回来。在此处查看带注释的代码:

while((br.readLine()) != null) { // <-- read a line and compare it to null
    String line = br.readLine(); // <-- read another line

应该是类似

String line;
while ((line = br.readLine()) != null) {

while (true) {
    String line = br.readLine();
    if (line == null) {
        break;
    }
    // ...

在确定行为Car之前,请确保令牌数量正确。

if (lineArray.length >= 3) {
    Car car = new Car();
    car.setMake(lineArray[0]);
    car.setModel(lineArray[1]);
    car.setVin(lineArray[2]);
    carArray.add(car);
} else {
    System.err.printf("%s is not a car.%n", line);
}