Java Stdin and Stdout II 为什么要给scan.nextLine()

Java Stdin and Stdout II why is it necessary to give scan.nextLine()

Problem Statement

In this challenge, you must read an integer, a double, and a String from stdin, then print the values according to the instructions in the Output Format section below. To make the problem a little easier, a portion of the code is provided for you in the editor.

Note: We recommend completing Java Stdin and Stdout I before attempting this challenge.

Input Format

There are three lines of input:

  • The first line contains an integer.
  • The second line contains a double.
  • The third line contains a String.

Output Format

There are three lines of output:

  • On the first line, print String: followed by the unaltered String read from stdin.
  • On the second line, print Double: followed by the unaltered double read from stdin.
  • On the third line, print Int: followed by the unaltered integer read from stdin.

To make the problem easier, a portion of the code is already provided in the editor.

Note: If you use the nextLine() method immediately following the nextInt() method, recall that nextInt() reads integer tokens; because of this, the last newline character for that line of integer input is still queued in the input buffer and the next nextLine() will be reading the remainder of the integer line (which is empty).

Sample Input

42
3.1415
Welcome to HackerRank's Java tutorials!

Sample Output

String: Welcome to HackerRank's Java tutorials!
Double: 3.1415
Int: 42
import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        double d = scan.nextDouble();
        //scan.nextLine();
        String s = scan.nextLine();

        // Write your code here.

        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}

在上面的代码中,如果我注释 scan.nextLine(),我将无法读取下一行中的字符串输入。为什么要在 String s 的实际占位符之前给出 scan.nextLine()?

这是我得到的输出。

String: 
Double: 3.1415
Int: 42

因为回车后有一个换行符,nextInt() 不会消耗它,它必须被 scan.nextLine() 消耗。

Why is nextLine() returning an empty string?