以下 Java 中的简单代码的行为有些奇怪,我无法理解。
final public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("\nHow many names? ");
int n = sc.nextInt();
String[] a = new String[n];
a[0] = sc.nextLine(); //This line serves no purpose at all. It's useless and should be removed.
for (int i=0; i<n; i++)
{
System.out.print("\nEnter the name:->");
a[i] = sc.nextLine(); //request for input only inside the loop.
}
for (int i=0; i<a.length; i++)
{
System.out.println(a[i]);
}
}
}
上面的代码运行良好,没有任何问题,并在控制台上显示输入到数组 a[] 中的名称数量,但是当我删除行 <强>a[0] = sc.nextLine();//这一行根本没有任何作用。它没有用,应该删除。,它首先显示用户数量。假设 3. 没有问题,但是当循环开始迭代时,它将询问名称,并且第一次消息 输入名称:-> 显示两次
<小时/>输出如下所示。
有多少个名字? 3
输入名称:-> 不允许在此处输入名称。
输入名字:->老虎
输入名字:->Pitter
老虎
皮特
<小时/>虽然我在“多少个名字?”中输入了 3,但它只允许输入两个名字。为什么?
<小时/>再次注意,上面显示的代码运行良好。仅当上面段落中用粗体后面指定的行被注释掉时才会出现该问题。
最佳答案
当您使用 Scanner.nextInt()
时,它本身不会消耗新行(或其他分隔符),因此返回的下一个标记通常是空字符串。因此,您需要在其后面添加 Scanner.nextLine()
。您可以丢弃结果而不是将其分配给 a[0]
:
int n = sc.nextInt();
sc.nextLine();
正是出于这个原因,我建议总是使用nextLine
(或BufferedReader.readLine()
)并在使用之后进行解析>Integer.parseInt()
.
关于java - 一段简单的 Java 代码运行效果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043255/