You need to enable JavaScript to run this app. Java数组输入场景下可正常读取成绩但姓名接收被跳过问题
优惠活动
大模型
产品
解决方案
定价
更多

Java数组输入场景下可正常读取成绩但姓名接收被跳过问题

Scanner读取姓名环节被跳过的问题说明

核心成因

Scanner.nextInt() 的读取逻辑仅匹配、读取输入流中的整数段,不会消费整数输入后伴随的换行符——也就是你输完成绩按下回车产生的\n会一直残留在输入缓冲区中。
后续调用sc.nextLine()时,这个残留的换行符会被直接识别为一行输入的结束,程序不会等待用户输入姓名,直接把空字符串存入姓名数组,表现就是姓名输入环节被直接跳过。

对应修复方式

  • 方式一:读取成绩后主动清空残留换行
    在nextInt()读取完成绩之后,额外调用一次空的nextLine()把缓冲区里的残留换行符消耗掉,再正式读取姓名:
    System.out.println("position mrks" + i);
    num[i] = sc.nextInt();
    // 消耗nextInt()遗留的换行符
    sc.nextLine();
    System.out.println("position name " + i);
    a[i] = sc.nextLine();
    
  • 方式二:统一使用nextLine()读取所有输入
    全程用nextLine()读取整行内容,再把成绩对应的文本手动转为整数,从根源上规避不同读取方法的缓冲区兼容问题:
    System.out.println("position mrks" + i);
    num[i] = Integer.parseInt(sc.nextLine());
    System.out.println("position name " + i);
    a[i] = sc.nextLine();
    
  • 方式三:使用next()读取单段无空格的姓名
    如果输入的姓名本身不含空格,可以直接用next()方法读取内容,该方法会自动跳过所有前置的换行、空白分隔符,直接读取直到下一个分隔符出现的文本内容,无需额外处理残留换行:
    System.out.println("position mrks" + i);
    num[i] = sc.nextInt();
    System.out.println("position name " + i);
    a[i] = sc.next();
    

内容的提问来源于stack exchange,提问作者InAlO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 11:57:03