Форум программистов, компьютерный форум, киберфорум
Наши страницы

Java SE (J2SE)

Войти
Регистрация
Восстановить пароль
 
Anglomilian
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 5
#1

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

25.01.2017, 11:13. Просмотров 268. Ответов 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 в конструкторе (Java SE):

Scanner ошибка в nextInt() - Java SE
Выдает ошибку: at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) Злится именно на строку:...

Ошибка с созданием объекта Scanner - Java SE
Доброго времени суток. Компилирую в Eclips Eclipse SDK Version: 3.5.0 Build id: I20090611-1540 (c) Copyright Eclipse...

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

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

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

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

6
Artmal
85 / 84 / 36
Регистрация: 14.11.2015
Сообщений: 1,003
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
4004 / 3739 / 467
Регистрация: 18.05.2010
Сообщений: 9,316
Записей в блоге: 11
Завершенные тесты: 1
25.01.2017, 12:29 #4
Не закрывайте Scanner, который создаётся из System.in.
0
Artmal
85 / 84 / 36
Регистрация: 14.11.2015
Сообщений: 1,003
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 / 36
Регистрация: 14.11.2015
Сообщений: 1,003
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
Привет! Вот еще темы с ответами:

Ошибка при попытке создания socket - Java SE
Здравствуйте! При запуске программы возникает ошибка "Permission denied: connect" в строке создания socket'а import java.io.*; ...

Scanner - Java SE
Добрый вечер, уважаемые форумчане! Хочу реализовать консольное многоуровневое меню по следующему принципу: ОСНОВНОЕ МЕНЮ: ...

Scanner - Java SE
Здравствуйте, я только начинаю изучать java, подскажите что означает это строчка :Scanner sc = new Scanner(System.in)? перевод из строки в...

Scanner - Java SE
привет всем...ребята помогите!xотел создать банкомат с 10 клиентами через scanner чтот-то не получается!задание такое било.гани...


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

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

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