2015-10-21 3 views
0

Я искал вокруг и не могу найти решение моей проблемы. Для одного из моих курсов мне поручено написать простую консольную систему электронной почты. Когда пользователю предлагается создать тело сообщения, строковая переменная, содержащая ввод, принимает только одно слово, а не целое сообщение. Я прочитал, что должен использовать readLine(), но когда программа предложит пользователю ввести тело сообщения, он полностью пропускает ввод для этого сегмента. Чтобы исправить это, я прочитал, что перед тем, как прочитать строку, я должен пропустить пропуск («\ n»). Теперь, однако, программа не заканчивается после нажатия пользователем Enter. Он просто держит вход и не позволит мне ничего делать.Java - чтение нескольких входных строк консоли в переменную

Вот немного кода, чтобы помочь:

  Scanner in = new Scanner(System.in); 
      //Declare variables 
      String subject, reciepent, message = ""; 
      //Get subject 
      System.out.println("> Enter subject: "); 
      subject = in.next(); 
      //Get reciepent 
      System.out.println("> Enter reciepent: "); 
      reciepent = in.next(); 
      //Get message 
      System.out.println("> Enter message: "); 
      in.skip("\n"); 
      message = in.nextLine(); 
      //Print out message to verify user input 
      System.out.println("> " + message); 

Я не понимаю, как nextLine() работает для всех потоков я искал, но не для меня.

+0

Так сразу после 'recipent = in.next(),' 'положить in.nextLine();' и посмотреть, если это помогает. Также я уверен, что вы можете избавиться от 'in.skip (" \ n ");' если у вас нет этого по какой-то причине. – 3kings

+0

Его потому, что 'next()' не использует новую строку, см. Http://stackoverflow.com/questions/13102045/skipping-nextline-after-using-next-nextint-or-other-nextfoo-methods –

ответ

0

Решение этой проблемы не использовать метод .skip(), но использовать .nextLine() вместо этого, который удаляет завершающую «\ п» характер из входного потока по вашему желанию.

Так измените строку: in.skip("\n"); к in.nextLine();

+0

Отлично работает , благодаря! – Dev909

0

Попробуйте использовать nextLine(), который ждет ввода пользователем и затем возвращает вход. Ваш код должен быть таким:

Scanner in = new Scanner(System.in); 
//Declare variables 
String subject, recipient, message; 
//Get subject 
System.out.println("> Enter subject: "); 
subject = in.nextLine(); 
//Get recipient 
System.out.println("> Enter reciepent: "); 
recipient = in.nextLine(); 
//Get message 
System.out.println("> Enter message: "); 
message = in.nextLine(); 
//Print out message to verify user input 
System.out.println("> " + message); 
0

Как насчет

Scanner s = new Scanner(System.in); 

String line = ""; 

while((line = s.nextLine()) != null) { 

    System.out.println("> Enter subject: "); 

subject = in.nextLine(); 

//Get recipient 
System.out.println("> Enter reciepent: "); 
recipient = in.nextLine(); 

//Get message 
System.out.println("> Enter message: "); 
message = in.nextLine(); 

//Print out message to verify user input 
System.out.println("> " + message); 

} 
Смежные вопросы