java - 使用扫描仪读取下一行的顺序出现问题

标签 java io java.util.scanner inputstream

我正在使用“Scanner”做一些基本的java程序。我读过整数、 double 和字符串。

我在将 String 扫描器与 int 和 double 等其他扫描器一起使用时遇到一些问题。

声明部分:

    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 是空的。

订单#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();     

结果: 工作正常!!

那么为什么秩序在这里发挥作用呢?

最佳答案

执行上的差异(订单发生变化)是由于换行不是 strong> 由 nextInt()nextDouble()next()nextFoo() 方法使用。

因此,每当您在任何这些方法之后调用 nextLine() 时,它都会消耗该换行符,并且实际上跳过了该语句

修复很简单,不要在 nextLine() 之前使用 nextFoo() 方法。尝试:-

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();

Order#3 工作正常,因为 nextLine() 是第一个语句,因此,没有 left-超过个字符需要消耗。

相关:Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods

关于java - 使用扫描仪读取下一行的顺序出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43376526/

相关文章:

java - Spring创建bean时出错FileNotFoundException

java - 这是使用 Java Streams 的正确方法吗?

C++写到文件前面

java - 使用扫描仪和嵌套for循环在java中创建空心矩形

在输入中使用空格时 Java 扫描器输入不匹配

java - 我遇到数字格式异常

java - 通过按 jbutton java 更改图像

Java:具有状态的 ASCII 随机行文件访问

c - 如何从 C 中的控制台读取一行?

Java 应用程序卡在 in.hasNext(); 上