扫描仪读取下一行命令的麻烦

我正在使用'扫描仪'来做一些基本的Java程序。 我读了Integer,Double和String。

我有一些使用扫描仪与其他扫描仪像int和双重字符串的问题。

声明部分:

    Scanner scan = new Scanner(System.in);

    int i2;
    double d2;
    String s2;

为了#1:

    i2 = scan.nextInt();
    d2 = scan.nextDouble();
    s2 = scan.nextLine();     

结果:编译器等待输入i2和d2,但不等待输入s2。 它在s2 = scan.nextLine();后执行s2 = scan.nextLine(); 即刻。 当我调试时,s2是空的。

为了#2:

    i2 = scan.nextInt();
    s2 = scan.nextLine();
    d2 = scan.nextDouble();     

结果:编译器这次等待输入i2和s2 。 当我给输入hello它会引发错误。

1
hello
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextDouble(Scanner.java:2413)
    at HelloWorld.main(HelloWorld.java:18)

为了#3:

    s2 = scan.nextLine();
    i2 = scan.nextInt();
    d2 = scan.nextDouble();     

结果:工作正常!

那么为什么订单在这里扮演角色?


执行中的差异,在订单的变化,是由于这样的事实,即新的行 被消耗nextInt() nextDouble() next()nextFoo()方法。

因此,无论何时在任何这些方法之后发出对nextLine()的调用,它都会消耗该换行符 ,并且实际上跳过该语句

解决方法是简单的,不使用nextFoo()方法前nextLine() 试试: -

i2 = Integer.parseInt(scan.nextLine());
d2 = Double.parseDouble(scan.nextLine());
s2 = scan.nextLine();

否则,你可以通过消费新线

i2 = scan.nextInt();
d2 = scan.nextDouble();
scan.nextLine(); //---> Add this before the nextLine() call
s2 = scan.nextLine();

顺序#3工作正常,因为nextLine()是第一条语句,因此没有要使用的剩余字符。

相关:扫描程序在使用next(),nextInt()或其他nextFoo()方法之后跳过nextLine()


尝试调用next()而不是nextLine()来读取String。

链接地址: http://www.djcxy.com/p/96073.html

上一篇: Trouble with order of reading next line with Scanner

下一篇: Scanner nextLine Java error