Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Anglomilian
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 5
#1

Ошибка повторного создания Scanner в конструкторе

25.01.2017, 11:13. Просмотров 303. Ответов 6

Есть код в котором 2 класса в одном модуле (так требуется в задании).
При запуске ship s1 = new ship(1) конструктор отрабатывает корректно, запрашивает ввод имени, присваивает атрибуту класса. Однако при запуске создания второго объекта ship s2 = new ship(2) ввод имени не появляется и при попытке присваивания атрибуту класса строки из сканера появляется Exeption: No line found, что логично так как ввод имени не запускался.

Почему сканер при повторном вызове не создается и не просит ввод строки?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ship s1 = new ship(1);
ship s2 = new ship(2);
 
class ship {
 int snumber;
 String sname;
 int slong;
 //конструктор
 ship(int sn){
  this.snumber = sn;
  System.out.print("Enter ship" + sn + " name: ");
  this.sname = sc.nextLine();
  sc.close();
 }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2017, 11:13
Ответы с готовыми решениями:

Scanner ошибка в nextInt()
Выдает ошибку: at java.util.Scanner.next(Unknown Source) at...

Ошибка с созданием объекта Scanner
Доброго времени суток. Компилирую в Eclips Eclipse SDK Version: 3.5.0...

Scanner в Java (scanner.nextLine()
Добрые люди, есть код, который при одном itemName = scanner.nextLine(); не...

Ошибка после повторного запуска потока
Привет всем, решил попробовать себя в потоках но как-то не получилось....

Scanner, ошибка "the value of local variable is not used"
Пример взят из книги Хорстмана - Java 2.0, том первый с 87 страницы. ...

6
Artmal
85 / 84 / 54
Регистрация: 14.11.2015
Сообщений: 1,013
25.01.2017, 11:27 #2
Очевидно при вызове первого конструктора ты закрываешь свой Scanner, а потом его нигде не открываешь. Создавай в конструкторе новый Scanner или не закрывай его там.
0
Anglomilian
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 5
25.01.2017, 11:30  [ТС] #3
пропустил строку. создание сканера есть в конструкторе, конечно. он создается и закрывается в конструкторе.
Java
1
2
3
4
5
6
7
8
//конструктор
 ship(int sn){
  this.snumber = sn;
  Scanner sc = new Scanner(System.in);
  System.out.print("Enter ship" + sn + " name: ");
  this.sname = sc.nextLine();
  sc.close();
 }
0
turbanoff
Эксперт Java
4016 / 3751 / 741
Регистрация: 18.05.2010
Сообщений: 9,329
Записей в блоге: 11
Завершенные тесты: 1
25.01.2017, 12:29 #4
Не закрывайте Scanner, который создаётся из System.in.
0
Artmal
85 / 84 / 54
Регистрация: 14.11.2015
Сообщений: 1,013
25.01.2017, 12:56 #5
sc.close() также закрывает поток System.in

В идеале вам следует создать сканер, который будет обеспечивать ввод на протяжении работы программы. То есть в конструкторе вам нужно будет ссылаться на уже существующий сканер.
0
Anglomilian
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 5
25.01.2017, 13:57  [ТС] #6
Странно это конечно, получается, что если 2 раза подряд написать:

Scanner sc = new Scanner(System.in);
this.sname = sc.nextLine();
sc.close();

Scanner sc = new Scanner(System.in);
this.sname = sc.nextLine();
sc.close();


то во второй раз оно не работает, хотя вроде бы все корректно написано. System.in указывается же при создании нового объекта Scanner, по идее, если он даже и был закрыт, то должен открываться.
0
Artmal
85 / 84 / 54
Регистрация: 14.11.2015
Сообщений: 1,013
25.01.2017, 14:02 #7
Кто вам сказал что он должен открываться? Передал поток в качестве параметра = поток должен обязательно открыться?
0
25.01.2017, 14:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2017, 14:02

Ошибка создания entityManagerFactory в spring_boot
Всем привет! Ребят, может подскажет кто в чем проблема по данной ошибке? Я не...

Spring data - ошибка создания сервиса
Всем привет кодеры. Решил я стать модным чуваком и попробовать спринг дату. Но...

Ошибка при попытке создания socket
Здравствуйте! При запуске программы возникает ошибка "Permission denied:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru