2014-10-29 2 views
0

Я пытаюсь ввести пользователя int, а затем ввести это количество имен.Длина массива, инициализированная сканером

Программа печатает эти имена в обратном порядке и в обратном порядке. Однако массив, в котором я храню эти имена, всегда создается слишком маленьким элементом, когда я использую Scanner. Когда я просто присваиваю номер себе, у меня нет этой проблемы. Есть ли что-то уникальное с Scanner или что я делаю неправильно?

import java.util.Scanner; 

class forTester { 
    public static void main (String str[]) { 
     Scanner scan = new Scanner(System.in); 

     //Why does this commented code scan only one less name than expected??? 
     /* 
     System.out.println("How many names do you want to enter?"); 
     int num = scan.nextInt(); 
     System.out.println("Enter " + num + " Names:"); 
     String names[] = new String[num]; 
     */ 
     //Comment out the next two lines if you use the four lines above. 
     System.out.println("Enter " + 4 + " Names:"); 
     String names[] = new String[4]; 

     // The code below works fine. 
     for (int i = 0; i < names.length; i++) { 
      names[i]=scan.nextLine(); 
     } 

     for(int i = names.length - 1; i >= 0; i--) { 
      for(int p = names[i].length() - 1; p >= 0; p--) { 
       System.out.print(names[i].charAt(p)); 
      } 
      System.out.println(""); 
     } 
    } 
} 

ответ

0

Изменить комментировал код:

System.out.println("How many names do you want to enter?"); 
    int num = scan.nextInt(); 
    System.out.println("Enter " + num + " Names:"); 
    String names[] = new String[num]; 
    scan.nextLine(); // added this to consume the end of the line that contained 
        // the first number you read 
0

Проблема заключается в том, что nextInt() оставляет символ новой строки, которая будет сожрал на nextLine() в первой итерации. Итак, вы чувствуете, что размер массива на один меньше. На самом деле, ваш первый элемент массива i.e, 0-й индекс будет иметь новый символ строки.

Ваш код должен быть:

System.out.println("How many names do you want to enter?"); 
    int num = scan.nextInt(); // leaves behind a new line character 
    System.out.println("Enter " + num + " Names:"); 
    String names[] = new String[num]; 
    scan.nextLine() // to read the new line character left behind by scan.nextInt()