Не удается прочитать файл. Программа палает с 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
Во-первых, я не очень понял как у вас связан конструктор 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,
//всё верно, ваш код делает ровно то,
//что вы написали
Это можно легко было увидеть, воспользовавшись дебаггером
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как сделать, чтобы из одного класса перейти к другому классу? Например, имеются определённые условия, при которых должен начать выполнение...
Изначально IDE работала нормально, но с некоторых пор почему-то перестала корректно запускатьсяИдет загрузка и подклчючение модулей, но после...
Не получается открыть файл в программеУже открывал и как в языке Си,через адрес файла указывал, по разному вообщем