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
Форумы портала PHP.SU :: Версия для печати :: java ввод с клавиатуры
Форумы портала PHP.SU » Разное » Другие языки программирования » java ввод с клавиатуры

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

1. kuller - 20 Сентября, 2015 - 17:43:33 - перейти к сообщению
начал изучать 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 т.е. надо чтоб каждое значение указывалось отдельно, а сейчас два последних объединяет. Почему так?
2. teddy - 20 Сентября, 2015 - 19:20:42 - перейти к сообщению
Так как вы нажимаете enter после ввода числа, затем вызываете nextInt(), происходит считывание только числового значения, а символ переноса строки порожденный нажатием enter остается висеть в буфере. Но после компилятор встречает вызов nextLine(), считывает оставшийся в буфере символ переноса строки и "идёт дальше" что бы вывести в консоль слово Last.

Решений данной проблемы несколько.
Самый простой - вызвать sc.nextLine(); после вызова nextInt() и таким образом считать зависший в буфере символ переноса строки.

 

Powered by ExBB FM 1.0 RC1