Java 中 Scanner.nextLine 的问题

Problems with Scanner.nextLine in Java

在Java,我试过了

try (Scanner sc = new Scanner(System.in)) {
    while (sc.hasNextLine()) {
        System.out.print("Name: ");
        String name = sc.nextLine();
        System.out.println("Name is \"" + name + "\"");
    }
}

但它在要求输入之前不输出 Name:

控制台只显示一个空的控制台window,我可以在其中输入名称。

如何确保在询问名称之前输出Name:

编辑

try (Scanner sc = new Scanner(System.in)) {
    System.out.print("Name: ");

    while (sc.hasNextLine()) {
        String name = sc.nextLine();
        System.out.println("Name is \"" + name + "\"");

        System.out.print("Age: ");
        int age = sc.nextInt();
        System.out.println("Age is " + age);

        System.out.print("Name: ");
    }

将你的 println 放在 while 循环之前,然后在末尾添加一个。

try (Scanner sc = new Scanner(System.in)) {
    System.out.print("Name: ");        
    while (sc.hasNextLine()) {

        String name = sc.nextLine();
        System.out.println("Name is \"" + name + "\"");
        System.out.print("Name: ");
    }
}

扫描仪在运行下一个代码之前会等待接收到输入,因此只需将打印件放在扫描仪之前,然后放在 while 循环的末尾。

你应该像这样在 while 循环之前放置 System.out.print("Name: ");

  try (Scanner sc = new Scanner(System.in)) {
        System.out.print("Name: ");
        while (sc.hasNextLine()) {
            String name = sc.nextLine();
            System.out.println("Name is \"" + name + "\"");
        }
    }

如果您想知道此问题的原因,请查看此 link1 and link2

这可能是避免重复代码的更好设计。 不必将循环结束条件限制为 while 语句 ;)

    try (Scanner sc = new Scanner(System.in)) {
        while (true) {
            System.out.print("Name: ");
            if (!sc.hasNextLine()) break;
            String name = sc.nextLine();
            System.out.println("Name is \"" + name + "\"");
        }
    }

编辑: 您的编辑无法正常工作,因为 sc.nextInt() 没有吃掉换行符,因此请将 sc.nextLine() 放在 sc.nextInt() 之后。