Я пишу программу, которая использует класс Event, в котором есть экземпляр календаря и описание типа String. Метод для создания события использует Scanner для приема месяца, дня, года, часа, минуты и описания. Проблема заключается в том, что метод Scanner.next() возвращает только первое слово перед пробелом. Поэтому если вводится "Мой день рождения", то описание этого экземпляра события будет просто "Мой".
Я провел небольшое исследование и обнаружил, что люди используют Scanner.nextLine() для решения этой проблемы, но когда я пробую это, он просто проскакивает мимо того места, где должен быть ввод. Вот как выглядит часть моего кода:
System.out.print("Please enter the event description: ");
String input = scan.nextLine();
e.setDescription(input);
System.out.println("Event description" + e.description);
e.time.set(year, month-1, day, hour, min);
addEvent(e);
System.out.println("Event: "+ e.time.getTime());
И вот какой результат я получаю:
Please enter the event description: Event description
Event: Thu Mar 22 11:11:48 EDT 2012
Он пропускает место для ввода строки описания, и в результате описание (которое изначально установлено на пустое место - " " ") никогда не изменяется.
Как я могу это исправить?
Когда вы читаете год месяц день час минуты с помощью чего-то вроде nextInt(), он оставляет остальную часть строки в парсере/буфере (даже если она пустая), поэтому когда вы вызываете nextLine(), вы читаете остальную часть этой первой строки.
Я предлагаю вызывать scan.nextLine() до того, как вы напечатаете следующий запрос, чтобы отбросить остаток строки.
Когда вы читаете год месяц день час минуты с помощью чего-то вроде nextInt()
, это оставляет остальную часть строки в парсере/буфере (даже если она пустая), поэтому когда вы вызываете nextLine()
, вы читаете остальную часть этой первой строки.
Я предлагаю вам использовать scan.next()
вместо scan.nextLine()
.
Scanner ss = new Scanner(System.in);
System.out.print("Enter the your Name : ");
// Below Statement used for getting String including sentence
String s = ss.nextLine();
// Below Statement used for return the first word in the sentence
String s = ss.next();