使用nextInt()方法后使用nextLine()方法

Sar*_*til -1 java stdin scanning

使用nextLine方法后无法使用nextInt方法。这是下面给出的注释...

在黑客等级中的注释:(如果您在该nextLine()方法之后立即使用该方法nextInt(),请回想起nextInt()读取整数标记;因此,该整数输入行的最后一个换行符仍在输入缓冲区中排队,下一个nextLine()将读取整数行的其余部分(为空)。nextLine方法不会被跳过,但它为空。

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();
    String s=scan.nextLine();
    // Write your code here.

    System.out.println("String: " + s);
    System.out.println("Double: " + d);
    System.out.println("Int: " + i);
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:字符串:双精度:3.1415整数:42

小智 6

你可以试试这个。

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        double y = sc.nextDouble();
        sc.nextLine();
        String s = sc.nextLine();

        System.out.println("String: " + s);
        System.out.println("Double: " + y);
        System.out.println("Int: " + x);

}
Run Code Online (Sandbox Code Playgroud)


amr*_*ngh 5

在Scanner类中,如果我们在七个nextXXX()方法中的任何一个之后调用nextLine()方法,则nextLine()不会从控制台读取值,并且光标也不会进入控制台,它将跳过该步骤。nextXXX()方法是nextInt(),nextFloat(),nextByte(),nextShort(),nextDouble(),nextLong(),next()。

那是因为Scanner#nextInt方法不会占用您输入的最后一个换行符,因此该换行符将在下一次对Scanner#nextLine的调用中使用。

您可以在Scanner#nextInt之后触发空白的Scanner#nextLine调用,以消耗该行的其余部分,包括换行符

int option = input.nextInt();
input.nextLine();  // Consume newline left-over
String str1 = input.nextLine();
Run Code Online (Sandbox Code Playgroud)