Java的扫描仪类阅读串
-
13-09-2019 - |
题
我得到了以下代码:
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
注意它跳过第一名称条目?它跳过它,并直奔第二个名称项。我试图寻找是什么原因造成这一点,但我似乎并没有能够打钉。我希望有一个人可以帮助我。感谢
解决方案
的原因的错误是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();
}
其他提示
使用sc.nextLine();两个时间,使我们可以阅读字符串的最后一行
sc.nextLine() sc.nextLine()
这是因为in.nextInt()不改变线。所以,你先在你的循环“输入”(按3之后)导致()你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();
}
这是因为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();
}
您可以简单替换
names[i] = in.nextLine();
与names[i] = in.next();
使用next()将只返回一个空间之前会发生什么。 nextLine()返回当前行之后自动移动向下扫描器
不隶属于 StackOverflow