2009-09-23 2 views
24

Я получил следующий код:Java Сканер чтение класса строка

int nnames; 
String names[]; 

System.out.print("How many names are you going to save: "); 
Scanner in = new Scanner(System.in); 
nnames = in.nextInt(); 
names = new String[nnames]; 

for (int i = 0; i < names.length; i++){ 
    System.out.print("Type a name: "); 
    names[i] = in.nextLine(); 
} 

И выход для этого кода является следующее:

How many names are you going to save:3 
Type a name: Type a name: John Doe 
Type a name: John Lennon 

Обратите внимания, как он пропустил первую запись имени ?? Он пропустил его и пошел прямо во вторую запись. Я попытался посмотреть, что вызывает это, но я, похоже, не могу прибить его. Я надеюсь, что кто-то может мне помочь. Спасибо

+2

Exact (на самом деле, точно) матч (http://stackoverflow.com/questions/1466008/ Java-сканер-класс-чтения-строка / – CPerkins

ответ

26

Причина ошибки в том, что nextInt только тянет целое число, а не новую строку. Если вы добавите in.nextLine() перед циклом for, он будет есть пустую новую строку и позволит вам ввести 3 имени.

int nnames; 
String names[]; 

System.out.print("How many names are you going to save: "); 
Scanner in = new Scanner(System.in); 
nnames = in.nextInt(); 

names = new String[nnames]; 
in.nextLine(); 
for (int i = 0; i < names.length; i++){ 
     System.out.print("Type a name: "); 
     names[i] = in.nextLine(); 
} 

или просто прочитайте строку и проанализируйте ее как целое.

int nnames; 
String names[]; 

System.out.print("How many names are you going to save: "); 
Scanner in = new Scanner(System.in); 
nnames = Integer.parseInt(in.nextLine().trim()); 

names = new String[nnames]; 
for (int i = 0; i < names.length; i++){ 
     System.out.print("Type a name: "); 
     names[i] = in.nextLine(); 
} 
2

Это потому, что in.nextInt() не меняет линию. Таким образом, вы сначала «вводите» (после нажатия 3) вызывают завершение endOfLine вашим in.nextLine() в вашем цикле.

Вот небольшое изменение, которое вы можете сделать:

int nnames; 
    String names[]; 

    System.out.print("How many names are you going to save: "); 
    Scanner in = new Scanner(System.in); 
    nnames = Integer.parseInt(in.nextLine()); 
    names = new String[nnames]; 

    for (int i = 0; i < names.length; i++){ 
      System.out.print("Type a name: "); 
      names[i] = in.nextLine(); 
    } 
2

Это потому, что in.nextInt() получают только INT число, не получает новую строку. Итак, вы вводите 3 и нажимаете «Enter», конец строки считывается in.nextline().

Вот мой код:

int nnames; 
String names[]; 

System.out.print("How many names are you going to save: "); 
Scanner in = new Scanner(System.in); 
nnames = in.nextInt(); 
in.nextLine(); 
names = new String[nnames]; 

for (int i = 0; i < names.length; i++){ 
     System.out.print("Type a name: "); 
     names[i] = in.nextLine(); 
} 
0

Вы могли бы просто заменить

names[i] = in.nextLine(); с names[i] = in.next();

Использование следующего() будет возвращать только то, что идет перед пробелом. nextLine() автоматически переводит сканер вниз после возвращения текущей строки.

3

использование sc.nextLine(); два времени, так что мы можем прочитать последнюю строку строки

sc.nextLine) sc.nextLine()

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