Считывание их файла, InputMismatchException

212
07 апреля 2018, 22:48

Не удается прочитать файл. Программа палает с InputMismatchExceptionна 4 строке файла. При том, что 3 и 4 строки идентичны. В родительском классе есть конструктор:

    public Object(Scanner sc){
    this.POINT = sc.next();
    this.name = sc.next();
    this.price = sc.nextInt();  // Ругается на эту строку в коде
    this.number = sc.nextInt();
}

А два дочерних содержат следующие:

   public ChildObject1(Scanner sc) {
    super(sc);
    this.valueInt = sc.nextInt();
}

и, соответственно

   public ChildObject2(Scanner sc) {
    super(sc);
    this.valueDouble = sc.nextDouble();
}

Я пытаюс считать файл следующим образом:

   Scanner sc = null;
    try {
        sc = new Scanner(new FileReader("src/file.txt"));
        sc.useLocale(Locale.ENGLISH);
        int i = 0;
        Object[] object= new Object[6];
        while (sc.hasNext()){
            object[i] = new Object(sc);
            i++;
        }
    } catch (FileNotFoundException e) {
        System.err.println("Input file is not found");
    } finally {
        if(sc != null) {
            sc.close();
        }
    }

И, собственно, сам файл:

Point1 Bla 2500 5
Point1 Bla 2500 3
Point2 Bla 2500 11 400
Point2 Bla 2500 13 200
Point3 Bla 2500 7 8,5
Point3 Bla 2500 6 5,2
Answer 1

Во-первых, я не очень понял как у вас связан конструктор new Array(sc), который вызывается в основном коде, с тремя конструкторами, которые приведены выше. Судя по всему у вас по факту вызывается первый конструктор всегда, который Object(Scanner sc), что при этом происходит:

на 3 вызове, на строке

Point2 Bla 2500 11 400

this.POINT = sc.next(); //Point2
this.name = sc.next(); //Bla
this.price = sc.nextInt();  //2500
this.number = sc.nextInt(); //11

Всё, далее, вы думаете что вы читаете уже 4 строку, но по факту у вас ещё не дочитано 400 из третьей, происходит новый вызов конструктора, где и происходит ваша ошибка:

this.POINT = sc.next(); //400 из третьей строки
this.name = sc.next(); //Point2 из четвертой
this.price = sc.nextInt(); //Bla это не число, InputMismatchException,             
                           //всё верно, ваш код делает ровно то, 
                           //что вы написали

Это можно легко было увидеть, воспользовавшись дебаггером

READ ALSO
Как из одного класса вызвать другой класс?

Как из одного класса вызвать другой класс?

Как сделать, чтобы из одного класса перейти к другому классу? Например, имеются определённые условия, при которых должен начать выполнение...

317
Ошибки NetBeans 8.2 IDE

Ошибки NetBeans 8.2 IDE

Изначально IDE работала нормально, но с некоторых пор почему-то перестала корректно запускатьсяИдет загрузка и подклчючение модулей, но после...

261
Класс uses or overrides a deprecated API

Класс uses or overrides a deprecated API

Есть такой класс:

274
Не могу открыть файл(C++)

Не могу открыть файл(C++)

Не получается открыть файл в программеУже открывал и как в языке Си,через адрес файла указывал, по разному вообщем

254