2015-06-30 2 views
0

Это базовая программа сортировки имен. Все работает, за исключением того, что пользователь не может ввести имя. Это код:Сканер пропускает первый вход в петлю Java

public static void main(String args[]){ 
    Scanner sc = new Scanner(System.in); 
    System.out.println("How many names do you want to sort"); 
    int num = sc.nextInt(); 
    String[] names = new String[num]; 
    for (int x = 0; x < names.length; x++){ 
     int pos = x+1; 
     System.out.println("Enter name " + pos); 
     //String temp = sc.nextLine(); 
     names[x] = sc.nextLine(); 
    } 
    String sortedArray[] = sort(names); 
    for (int i = 0; i < sortedArray.length; i++){ 
     System.out.print(sortedArray[i] + " "); 
    } 
} 

Обновления: Я изменил код, если это первый раз, он вызывает sc.nextLine(), а затем задает вход, равные имена [0] Одна из проблем, с .next() заключается в том, что если имя человека составляет 2 слова, он рассматривает его как два имени. Это обновленный код, который работает:

public static void main(String args[]) { 
    Scanner sc = new Scanner(System.in); 
    System.out.println("How many names do you want to sort"); 
    int num = sc.nextInt(); 
    String[] names = new String[num]; 
    //String[] temp = new String[names.length]; 
    for (int x = 0; x < names.length; x++) { 
     int pos = x + 1; 
     if (x == 0) { 
      System.out.println("Enter name 1"); 
      sc.nextLine(); 
      names[0] = sc.nextLine(); 
     } else { 
      System.out.println("Enter name " + pos); 
      //String temp = sc.nextLine(); 
      names[x] = sc.nextLine(); 
     } 
    } 
    String sortedArray[] = sort(names); 
    for (int i = 0; i < sortedArray.length; i++) { 
     System.out.print(sortedArray[i] + " "); 
    } 
} 

ответ

1

Использование sc.next(); вместо sc.nextLine();

  • next() найдет и вернет следующий полный маркер из входного потока.
  • nextLine() продвинет сканер мимо текущей строки и возвращает вклад, который был пропущен

Кроме того, проверьте ниже описание от Scanner#nextLine().

Продвигает этот сканер мимо текущей строки и возвращает вход, который был пропущен . Этот метод возвращает остальную часть текущей строки, , за исключением любого разделителя строк в конце. Позиция установлена ​​на , начиная с следующей строки.

Поскольку этот метод продолжает поиск через вход, ищущий разделитель линии , он может буферизовать весь входной поиск по строке , чтобы пропустить, если нет разделителей строк.

Scanner sc = new Scanner(System.in); 
    System.out.println("How many names do you want to sort"); 
    int num = sc.nextInt(); 
    String[] names = new String[num]; 
    for (int x = 0; x < names.length; x++){ 
     int pos = x+1; 
     System.out.println("Enter name " + pos); 
     //String temp = sc.nextLine(); 
     names[x] = sc.next(); 
    } 
    /*String sortedArray[] = sort(names); 
    for (int i = 0; i < sortedArray.length; i++){ 
     System.out.print(sortedArray[i] + " "); 
    }*/ 
+0

У вас есть свой ответ, если нет, то, пожалуйста, напишите свой ответ так, что другие могут быть использованы из него. stackoverflow.com/help/accepted-answer – hagrawal

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