的Java Scanner类阅读串

问题描述:

我得到了下面的代码:的Java Scanner类阅读串

 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.next(); 
    } 

    System.out.println(names[0]); 

当我运行这段代码,扫描仪将只拿起第一个名字,而不是姓氏。当试图输入一个名字时,它有时会跳过一行,它会显示出来,就好像我把名字留空了一样,然后跳到下一个名字。我不知道是什么原因造成的。

我希望有人能帮助我!

编辑:我曾尝试in.nextLine();它修复了全名,但它仍然保持一条线,这里是输出的一个例子:

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

完全匹配http://stackoverflow.com/questions/1466418/java-scanner-class-reading-strings – CPerkins 2009-09-23 19:36:44

相反的:

in.next(); 

用途:

in.nextLine(); 

nextLine()读取字符,直到它找到一个新的行字符'\n'

Scanner.next停止阅读时遇到一个分隔符,这是一个空白。改为使用nextLine方法。

您的初始nextInt()后,仍然有一个空换行符在你的输入中。所以只要你的nextInt()后添加nextLine(),然后进入你的循环:

... 
Scanner in = new Scanner(System.in); 
nnames = in.nextInt(); 
in.nextLine(); // gets rid of the newline after number-of-names 
names = new String[nnames]; 

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

+0

+1我最近失去了一个编程竞赛,因为我使用next()而不是nextLine()来跳过那个f首先\\ n。那真是太愚蠢了: – 2009-09-23 20:45:10

+0

那是CodeJam,偶然吗?我今年第一次参加比赛,我被压扁了 - 甚至没有进入第二轮。但是我在第一轮和第一轮比赛中获得了乐趣,并且明年我会回来的。 – CPerkins 2009-09-24 12:52:51

尝试使用:

System.out.println() 

相反的:

System.out.print()