Присвоение значений массиву вызывает ошибку - PullRequest
0 голосов
/ 06 мая 2020

Извините за плохое название; мне трудно это объяснить. Работаю с текстовым файлом в формате марка, модель, номер. В текстовом файле для этого есть несколько таких строк. Когда моя программа запускается, вызывается конструктор с вводом моего файла, и он читает строки моего файла, присваивая значения объекту, который добавляется в мой массив. Странно то, что этот код работает только иногда. Например, он работал бы последовательно, если бы у меня было две строки только с маркой, моделью и номером. Однако когда я добавляю три строки, возникает ошибка. Иногда я перезапускаю программу или добавляю четвертую строку, и она работает. Понятия не имею, почему это происходит. Любая помощь приветствуется!:

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 Ответ

2 голосов
/ 06 мая 2020

Каждый раз, когда вы звоните 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...