2011-05-11 3 views
16

Я пишу программу, которая использует класс Event, в котором есть экземпляр календаря, и описание типа String. В методе создания события используется сканер для ввода месяца, дня, года, часа, минуты и описания. Проблема, с которой я столкнулась, заключается в том, что метод Scanner.next() возвращает только первое слово перед пробелом. Поэтому, если ввод «Мой День рождения», описание этого экземпляра события просто «Мой».Java Scanner String input

Я провел некоторое исследование и обнаружил, что люди использовали 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 

Он пропускает мимо места для ввода строки описания, и, как следствие, описание (которое изначально установлено в пустое пространство - ""), никогда не изменяется.

Как это исправить?

+0

Вы все равно не печатаете описание, так как вы знаете, что он не читает правильно? –

+0

Можете ли вы включить пример ввода? – Michael

+0

Я случайно пропустил строку кода, распечатав описание, но теперь я ее разместил. @ Майкл, я не знаю, чтобы рассказать вам о примере ввода, потому что я никогда не получаю приглашение ввести описание. – HolidayTrousers

ответ

14

Когда вы читаете в дневном часовом месяце месяца с чем-то вроде nextInt(), он оставляет остальную часть строки в парсере/буфере (даже если он пуст), поэтому, когда вы вызываете nextLine(), вы читаете остальную часть этой первой строки.

Предлагаю вам вызвать scan.nextLine() перед тем, как напечатать следующее приглашение, чтобы отбросить остальную часть строки.

+1

Кажется, это отлично работает для меня. Спасибо! – HolidayTrousers

+0

У меня тоже такая же проблема. Я также добавил 'scan.nextLine();' вместо 'input.nextLine(); 'но это дает мне предупреждение, не может найти символ' scan' и создать класс проверки. –

+0

@ ZacharyDale вы можете использовать только переменные, которые вы определили. Используйте установленный вами сканер. –

3

Когда вы читаете в дневном часовом месяце месяца с чем-то вроде nextInt(), он оставляет остальную часть строки в парсере/буфере (даже если он пуст), поэтому, когда вы вызываете nextLine(), вы читаете остальную часть этой первой строки ,

Предлагаю вам использовать scan.next() вместо scan.nextLine().

0
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();