一个不起作用的简单Java代码

Bha*_*esh 0 java

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指定的行时,才会出现此问题.

Mar*_*ers 6

使用时Scanner.nextInt(),它不会消耗新行(或其他分隔符)本身,因此返回的下一个标记通常是空字符串.因此,你需要跟着它Scanner.nextLine().您可以丢弃结果,而不是将其分配给a[0]:

int n = sc.nextInt(); 
sc.nextLine();
Run Code Online (Sandbox Code Playgroud)

出于这个原因,我建议总是使用nextLine(或BufferedReader.readLine())并在使用后进行解析Integer.parseInt().