You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Java成绩计算程序时控制台重复输出"Nome: "两次的问题

嘿,我太懂这个问题了!这是Java里Scanner类的经典小坑——输入缓冲区残留的换行符在搞鬼,我给你掰扯清楚:

问题根源

你用input.nextInt()读取学生数量的时候,它只会读取你输入的整数数字,而你按下回车键产生的**换行符(\n)**会留在输入缓冲区里没被处理。接下来当你用input.nextLine()去读取学生姓名时,它会直接把这个残留的换行符当成一个空的输入行读走,导致你感觉“跳过了一条输入指令”,然后循环继续执行,又打印了一次"Nome: ",看起来就像是重复打印了两次。

解决办法

给你两种简单的修复方案,选哪种都可以:

  • 方案一:读完整数后手动清空缓冲区
    在调用input.nextInt()之后,加一行input.nextLine(),把残留的换行符“吃掉”,这样后续读取姓名的时候就不会读到空内容了。修改后的代码片段:

    System.out.println("Informe a quantidade de alunos da sala de aula: ");
    quantidadeAlunos = input.nextInt();
    input.nextLine(); // 关键:清空缓冲区里的换行符
    qtdAlunos = new int[quantidadeAlunos];
    nomeAlunos = new String[quantidadeAlunos];
    
    // 假设你后续的循环是这样的
    for(x = 0; x < quantidadeAlunos; x++){
        System.out.print("Nome: ");
        nomeAlunos[x] = input.nextLine();
    }
    
  • 方案二:统一用nextLine()读取所有输入
    避免混合使用不同的Scanner读取方法,先读取整行输入,再把字符串转换成整数。这样从根本上避免了缓冲区残留问题,代码示例:

    System.out.println("Informe a quantidade de alunos da sala de aula: ");
    // 先读取整行,再转成整数
    String numAlunosStr = input.nextLine();
    quantidadeAlunos = Integer.parseInt(numAlunosStr);
    qtdAlunos = new int[quantidadeAlunos];
    nomeAlunos = new String[quantidadeAlunos];
    
小提示

以后用Scanner的时候要注意:nextInt()、nextFloat()这类方法只读取对应的数据类型,不会处理末尾的换行符;而nextLine()会读取从当前位置到换行符的所有内容(包括空内容)。混合使用这两类方法时,就很容易踩这个缓冲区的坑,要么记得手动清空,要么统一用nextLine()再做类型转换就好啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:48:32