用户输入`nextLine`和`nextInt`命令

时间:2015-07-28 08:37:42

标签: java input

以下是两个脚本,这些脚本仅在用户被要求输入的顺序上有所不同。脚本#1有效,而脚本#2没有按预期工作。 在脚本#1中,我先问name个问题,然后问age个问题。 在脚本#2中,我先问age个问题,然后问name个问题。

脚本#1(有效):

import java.util.Scanner;

public class Example2 {
    public static void main(String[] args) {
        // Initiate a new Scanner
        Scanner userInputScanner = new Scanner(System.in);

        // Name Question
        System.out.print("\nWhat is your name? ");
        String name = userInputScanner.nextLine();

        // Age Question
        System.out.print("How old are you?");
        int age = userInputScanner.nextInt();

        System.out.println("\nHello " + name + ". You are " + age
                + " years old");
    }
}

脚本#2(不起作用):

import java.util.Scanner;

public class Example2 {
    public static void main(String[] args) {
        // Initiate a new Scanner
        Scanner userInputScanner = new Scanner(System.in);

        // Age Question
        System.out.print("How old are you?");
        int age = userInputScanner.nextInt();

        // Name Question
        System.out.print("\nWhat is your name? ");
        String name = userInputScanner.nextLine();


        System.out.println("\nHello " + name + ". You are " + age
                + " years old");
    }
}
脚本#2中的

,用户输入age后,他/她将以下内容打印到控制台:

What is your name? 
Hello . You are 28 years old

然后脚本结束,不允许他/她输入name

我的问题: 为什么脚本#2不起作用? 我可以做些什么来使脚本#2工作(同时保持输入顺序)

4 个答案:

答案 0 :(得分:4)

阅读年龄后,您必须使用EOL(行尾):

    System.out.print("How old are you?");
    int age = userInputScanner.nextInt();
    userInputScanner.nextLine();


    // Name Question
    System.out.print("\nWhat is your name? ");
    String name = userInputScanner.nextLine();

如果你不这样做,EOL符号将在String name = userInputScanner.nextLine();消耗,这就是你无法输入的原因。

答案 1 :(得分:4)

当你读一行时,它会读到整行直到最后。

当你读取一个数字时,它只是读取数字,它不会读取行的结尾,例如,除非你再次调用nextInt(),在这种情况下它会将新行读作空格。< / p>

简而言之,如果您希望输入在数字后忽略任何内容,请写

int age = userInputScanner.nextInt();
userInputScanner.nextLine(); // ignore the rest of the line.

在您的情况下,如果您没有输入任何内容,则nextLine()将读取数字后的文本或空字符串。

答案 2 :(得分:2)

nextInt()方法不会消耗输入流的回车符。你需要自己消费它。

import java.util.Scanner;

public class Example2 {
    public static void main(String[] args) {
        // Initiate a new Scanner
        Scanner userInputScanner = new Scanner(System.in);

        // Age Question
        System.out.print("How old are you?");
        int age = userInputScanner.nextInt();

        // consume carriage return
        userInputScanner.nextLine();

        // Name Question
        System.out.print("\nWhat is your name? ");
        String name = userInputScanner.nextLine();


        System.out.println("\nHello " + name + ". You are " + age
                + " years old");
    }
}

答案 3 :(得分:1)

如果用户输入一个数字(比方说21),输入实际上是:“21 \ n”。

您需要通过额外调用nextLine跳过“\ n”:

// Age Question
System.out.print("How old are you?");
int age = userInputScanner.nextInt();
userInputScanner.nextLine(); // skip "\n"