2009-09-23 60 views
24

我得到了下面的代码:的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.nextLine(); 
} 

和输出的代码如下:

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

注意它跳过了第一个名字项?它跳过它,直接进入第二个名字。我试图寻找是什么原因造成的,但我似乎无法完成。我希望有一个人可以帮助我。谢谢

+2

精确(真的,准确)的比赛http://stackoverflow.com/questions/1466008/ Java的扫描仪类阅读串/ – CPerkins 2009-09-23 19:35:49

回答

26

错误的原因是nextInt只拉整数,而不是换行符。如果你在for循环之前添加一个in.nextLine(),它会吃掉空的新行,并允许你输入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之后)导致循环中的in.nextLine()读取endOfLine。

这里的小改变,你可以做:

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()只接受一个整型数字,没有收到新的生产线。所以你输入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();

使用next()将只返回一个空间之前会发生什么。 nextLine()在返回当前行后自动向下移动扫描器。

3

use sc.nextLine();两个时间让我们可以读取字符串的最后一行

sc.nextLine() sc.nextLine()