Java扫描程序跳过输入nextLine()但不跳过next()

时间:2017-04-22 10:17:37

标签: java java.util.scanner user-input

我在Java Scanner获得用户输入时遇到了一个相当奇怪的问题。我做了一个练习程序,首先使用nextDouble()读取一个double,输出一些简单的文本,然后使用相同的scanner对象来使用nextLine()获取字符串输入。

以下是代码:

import java.util.Scanner;

public class UsrInput {
    public static void main(String[] args) {

        //example with user double input
        Scanner reader = new Scanner(System.in);
        System.out.println("Enter a number: ");
        double input = reader.nextDouble();
        if(input % 2 == 0){
            System.out.println("The input was even");
        }else if(input % 2 == 1){
            System.out.println("The input was odd");
        }else{
            System.out.println("The input was not an integer");
        }

        //example with user string input
        System.out.println("Verify by typing the word 'FooBar': ");
        String input2 = reader.nextLine();
        System.out.println("The string equal 'FooBar': " + input2.equals("FooBar"));
     }      
 }

现在显然我的目的是要求第二个输入,如果字符串input2等于'FooBar',则打印是否为真。但是,当我运行它时,它跳过第二个输入并立即告诉我它不相等。 然而如果我将reader.nextLine()更改为reader.next(),它会突然发挥作用。

如果我创建一个新的Scanner实例并使用reader2.nextLine()

,它也可以

所以我的问题是为什么我的Scanner对象没有要求我输入新内容?如果我打印出“input2”的值,它就是空的。

1 个答案:

答案 0 :(得分:2)

您必须清除扫描仪才能使用reader.nextLine();,如下所示:

if (input % 2 == 0) {
    System.out.println("The input was even");
} else if (input % 2 == 1) {
    System.out.println("The input was odd");
} else {
    System.out.println("The input was not an integer");
}


reader.nextLine();//<<--------------Clear your Scanner so you can read the next input


//example with user string input
System.out.println("Verify by typing the word 'FooBar': ");
String input2 = reader.nextLine();
System.out.println("The string equal 'FooBar': " + input2.equals("FooBar"));

修改

  

为什么'next()'会忽略扫描仪中仍然留下的\ n?

您将在此处了解此示例:

next()

public static void main(String[] args) {
    String str = "Hello World! Hello Java!";

    // create a new scanner with the specified String Object
    Scanner scanner = new Scanner(str);

    while(scanner.hasNext()){
        System.out.println( scanner.next());
    }
    scanner.close();
}

<强>输出

Hello
World!
Hello
Java!

nextLine()

public static void main(String[] args) {
    String str = "Hello World!\nHello Java!";

    // create a new scanner with the specified String Object
    Scanner scanner = new Scanner(str);

    while(scanner.hasNext()){
        System.out.println( scanner.nextLine());
    }
    scanner.close();
}

<强>输出

Hello World!
Hello Java!

因此,我们可以理解next()逐字逐句阅读,因此它不会使用\ n像nextLine()