Java扫描仪跳过输入NextLine(),而不是Next()



我遇到了一个相当奇怪的问题,Java扫描仪获取用户输入。我制作了一个练习程序,该程序首先使用nextDouble()读取双重,输出一些琐碎的文本,然后使用相同的扫描仪对象使用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(),则突然起作用。

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

,它也有效

所以我的问题是为什么我的扫描仪对象不要求我提供新的输入?如果我打印出" input2"的值,它是空的。

您必须清除扫描仪,以便可以使用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()

相关内容

  • 没有找到相关文章

最新更新