Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: java ввод с клавиатуры

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
kuller
Отправлено: 20 Сентября, 2015 - 17:43:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




начал изучать java и не могу понять почему следующий код работает маленько не так

Main
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. package ru.itkreativ;
  3.  
  4. public class Main {
  5.     static public void main(String[] args){
  6.  
  7.         System.out.println(ExampStat.get());
  8.     }
  9. }
  10.  


ExampStat
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. package ru.itkreativ;
  3.  
  4. import java.util.Scanner;
  5.  
  6. /**
  7.  * Created by Серега on 20.09.2015.
  8.  */
  9. public class ExampStat {
  10.  
  11.     public static String get(){
  12.  
  13.         int age;
  14.         String name;
  15.         String last;
  16.  
  17.         Scanner sc = new Scanner(System.in);
  18.  
  19.         System.out.println("Age");
  20.         age = sc.nextInt();
  21.  
  22.         System.out.println("Name");
  23.         name = sc.nextLine();
  24.  
  25.         System.out.println("Last");
  26.         last = sc.nextLine();
  27.  
  28.         return "я "+last+" "+name+" мне "+age+" лет";
  29.     }
  30. }
  31.  


при запуске просит указать age потом сразу Name и Last т.е. надо чтоб каждое значение указывалось отдельно, а сейчас два последних объединяет. Почему так?
 
 Top
teddy
Отправлено: 20 Сентября, 2015 - 19:20:42
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Так как вы нажимаете enter после ввода числа, затем вызываете nextInt(), происходит считывание только числового значения, а символ переноса строки порожденный нажатием enter остается висеть в буфере. Но после компилятор встречает вызов nextLine(), считывает оставшийся в буфере символ переноса строки и "идёт дальше" что бы вывести в консоль слово Last.

Решений данной проблемы несколько.
Самый простой - вызвать sc.nextLine(); после вызова nextInt() и таким образом считать зависший в буфере символ переноса строки.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Другие языки программирования »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB