【日常排雷】——Java中的Scanner类对象调用nextInt()后调用nextLine();不会挂起的问题

通常来说,在调用Scanner类对象的nextLine()方法的时候,当前的线程是应该挂起的。

然而这几天刷题的时候遇到一个问题。

场景是这样的:

Int i = scanner.nextInt();
String str = scanner.nextLine();

运行的时候发现,当键盘输入完数字后当前的线程并没有因为下一行的输入代码而挂起,直接向后执行,导致了错误。

上网查阅了一下后发现,原来nextInt()只会读走键盘的输入的数字,而回车符号“\n”会保留,直接导致了后面nextLine()会收到一个回车符号,然后使我们产生线程没有挂起的错觉。

解决方案有二:

一、数字和字符串的输入使用两个不同的Scanner类对象:

Int i = scanner1.nextInt();
String str = scanner2.nextLine(); 

但是不知道为何,在一些刷题网站的IDE上,如果你使用了第二个Scanner对象并调用next系列的方法就会在运行时报越界(本地IDE无问题),所以建议用下面的方案。

二、统一使用nextLine(),当要输入数字时,以String的形式进行输入,然后转换成int类型:

int n = Integer.parseInt(sc.nextLine());

posted @ 2020-10-20 16:36  469の一方爬行  阅读(124)  评论(0编辑  收藏  举报