Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中Scanner.nextLine的问题_Java_Java.util.scanner_System.in - Fatal编程技术网

Java中Scanner.nextLine的问题

Java中Scanner.nextLine的问题,java,java.util.scanner,system.in,Java,Java.util.scanner,System.in,在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: 控制台只显

在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:

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

在询问姓名之前,如何确保输出了
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循环的末尾。

您应该将
System.out.print(“名称:”)放在打印机上在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 + "\"");
        }
    }

如果您想知道这个问题的原因,请查看一下,这可能是一个更好的设计,以避免重复代码。 不必将循环结束条件限制为while语句;)

编辑
您的编辑无法正常工作,因为
sc.nextInt()
没有吃换行符,所以请将
sc.nextLine()
放在
sc.nextInt()

之后,如果您的答案与我相同,您不需要再发布另一个。@10回复我想是这样,但我在没有看到您的答案的情况下回答的问题在哪里,但这是一个循环,所以我想在每次循环运行时打印名称,尝试运行它。您可以看到它在扫描仪之前打印,然后在扫描后再次打印。您还应该解释为什么它在最初的OP中无法正常工作。。。基本上,
Scanner#hasNextLine()
会在流仍然打开时等待一些输入。。。所以,在你输入一些东西之前,它不会进入循环…啊,我明白了。但是我编辑的代码呢?它不工作,在第二次迭代时表现正确。没有做任何更改。你是对的,不是刷新。
while(…hasNextLine())
正在等待输入,这就是它不打印的原因。。
  try (Scanner sc = new Scanner(System.in)) {
        System.out.print("Name: ");
        while (sc.hasNextLine()) {
            String name = sc.nextLine();
            System.out.println("Name is \"" + name + "\"");
        }
    }
    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 + "\"");
        }
    }