Java Scanner无法读取最后一行的问题及解决方法
问题修复方案
你的代码无法读取最后一行的核心原因是:Scanner默认按空白字符(空格、换行、制表符)分割输入,而非严格按行处理,加上nextInt()读取后会残留换行符,可能干扰后续读取逻辑。以下是两种可靠的修复方式:
方案一:按行读取并分割(推荐)
直接读取整行内容,再按空格分割提取k和s,完全匹配你“每行对应一组数据”的需求:
Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.nextLine(); // 消耗掉n后面的换行符,避免影响后续行读取 for (int i = 0; i < n; i++) { String line = sc.nextLine(); String[] parts = line.split(" "); int k = Integer.parseInt(parts[0]); String s = parts[1]; // 这里添加对k和s的处理逻辑 } sc.close();
方案二:修正原读取逻辑
如果坚持使用nextInt()和next(),只需确保输入格式严格符合要求,同时可以在循环后验证读取状态:
Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for (int i = 0; i < n; i++) { // nextInt()和next()会自动跳过所有空白字符,包括换行 int k = sc.nextInt(); String s = sc.next(); // 处理k和s } sc.close();
这种方式要求输入的n组数据必须用空白分隔(不管是否换行),若最后一行读取失败,大概率是输入的实际数据组数与n不匹配。
内容的提问来源于stack exchange,提问作者skltynve
相关产品推荐
相关产品推荐

