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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面运行良好,没有任何问题,并显示在控制台上输入数组a []的名称数量,但是当我删除行a [0] = sc.nextLine(); //这条线根本没用.它没用,应该删除.,它首先显示用户数.让我们说3.没有问题,但是当循环开始迭代时,它会询问名称并第一次输入消息输入名称: - >显示两次
输出将如下所示.
有多少名字?3
输入名称: - > Don't allow to enter the name here.
输入名称: - > Tiger
输入名称: - > Pitter
虎
雨声
虽然我为"有多少名字?"输入3,但它只允许输入两个名字.为什么?
请再次注意,上面显示的代码运行良好.仅当注释掉上一段中使用粗体latter指定的行时,才会出现此问题.
使用时Scanner.nextInt(),它不会消耗新行(或其他分隔符)本身,因此返回的下一个标记通常是空字符串.因此,你需要跟着它Scanner.nextLine().您可以丢弃结果,而不是将其分配给a[0]:
int n = sc.nextInt();
sc.nextLine();
Run Code Online (Sandbox Code Playgroud)
出于这个原因,我建议总是使用nextLine(或BufferedReader.readLine())并在使用后进行解析Integer.parseInt().