Java Scanner.nextLine()导致输入学生数量少一个的问题求助
嘿,这个坑我当初学Java Scanner的时候也踩过!太懂你的困惑了😉
问题到底出在哪?
你用scan.nextInt()读取学生数量后,输入回车产生的换行符会留在输入缓冲区里。当你紧接着调用scan.nextLine()时,它会直接读取这个空的换行符,相当于“跳过”了第一个学生的输入环节,最后自然就少收集了一个学生的名字。
而你用scan.nextLine()读全名是完全正确的选择——毕竟scan.next()只能读到空格就停,没法读取带空格的全名嘛。
两种简单的解决办法
方法一:吃掉残留的换行符
在scan.nextInt()之后,额外加一行scan.nextLine()来清空缓冲区里的换行符:
public class StudentRoster { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String[] students; int size; System.out.print("请输入班级学生数量:"); size = scan.nextInt(); // 关键:吃掉nextInt()留下的换行符 scan.nextLine(); students = new String[size]; for (int i = 0; i < size; i++) { System.out.print("请输入第" + (i + 1) + "个学生的全名:"); students[i] = scan.nextLine(); } // 测试输出 System.out.println("\n班级学生名册:"); for (String student : students) { System.out.println("- " + student); } scan.close(); } }
方法二:全程用nextLine()读取(更稳妥)
直接用scan.nextLine()读取所有输入,再把学生数量的字符串转成整数,从根源上避免换行符残留的问题:
public class StudentRoster { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String[] students; int size; System.out.print("请输入班级学生数量:"); // 先读整行,再转换为整数 size = Integer.parseInt(scan.nextLine()); students = new String[size]; for (int i = 0; i < size; i++) { System.out.print("请输入第" + (i + 1) + "个学生的全名:"); students[i] = scan.nextLine(); } // 测试输出 System.out.println("\n班级学生名册:"); for (String student : students) { System.out.println("- " + student); } scan.close(); } }
小补充
如果之后还遇到Scanner的输入问题,记住:nextInt()、nextDouble()这类方法只会读取数字部分,不会处理后面的换行符;而nextLine()会读取从当前位置到换行符的所有内容(包括空内容),所以两者混用的时候一定要注意缓冲区的残留哦!
内容的提问来源于stack exchange,提问作者calvin jackson
相关产品推荐
相关产品推荐

