Java循环结束后Scanner的nextLine()无法读取输入是什么原因?
问题根因
Scanner类的nextInt()方法仅读取输入流中的整数数值,不会处理用户输入完成后按下回车键产生的换行符\n,该换行符会残留在输入缓冲区中。后续你调用nextLine()时,方法会直接读取到这个残留的换行符,返回空字符串,所以看起来程序没有等待你的输入就直接向下执行了。
你之前在输入非整数的异常分支里加的scan.nextLine()是正确的,作用就是清空非法输入的整行内容避免死循环,唯独缺了合法输入整数后清空残留换行符的逻辑。
修复方案
在你确认读取到合法整数的分支中,增加一行scan.nextLine()吃掉残留的换行符即可,修改后的do-while代码块如下:
do { System.out.println("Enter an integer: "); if (scan.hasNextInt()) { index = scan.nextInt(); bool = true; // 新增这行,清除nextInt()留下的换行符 scan.nextLine(); } else { bool = false; System.out.println("Error: Index is not Integer."); scan.nextLine(); } } while (!bool);
内容的提问来源于stack exchange,提问作者L. Jacob
相关产品推荐
相关产品推荐

