我正在使用“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/