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

Java Scanner输入问题:输入1,2,3,4,5,a时为何未读取数字5?

为什么输入包含5时程序只计算到sum=10?

让我们一步步拆解你的代码逻辑和输入场景,找出问题所在:

核心问题:逻辑顺序完全搞反了

你的代码里先执行int number = scanner.nextInt();读取一个数字,然后用scanner.hasNextInt()检查下一个输入是否是整数。只有当下一个输入是整数时,才把当前读取的数字加入sum;如果下一个输入不是整数(比如你的输入里的a),就直接进入else分支打印结果——此时刚读取的数字(也就是5)根本没机会被加入sum!

举个具体的流程例子,当输入到5之后:

  1. 代码读取到number=5
  2. 检查下一个输入是a,不是整数,isAnInt=false
  3. 直接进入else分支,打印之前累计的sum(1+2+3+4=10)和avg(10/4=2),然后退出循环,5被完全丢弃了。

输入逗号带来的额外问题

你的输入是"1, 2, 3, 4, 5, a",但Scanner.nextInt()只会识别**空白字符(空格、换行、制表符)**分隔的整数。逗号不属于空白字符,所以当你输入1,之后,nextInt()读取1,下一个待解析的内容是",2"(逗号加2),这时候nextInt()尝试解析这个内容会直接抛出InputMismatchException。不过你说得到了sum=10,说明实际输入大概率是用空格分隔的(比如1 2 3 4 5 a),但核心问题还是逻辑顺序错误。

额外的小坑:整数除法导致平均计算不准

你的avg = Math.round((sum)/count);里,sum和count都是int类型,所以sum/count是整数除法(比如10/4=2,而不是2.5),之后再调用round结果还是2。如果想要正确的四舍五入,应该先把sum转成double类型再计算:Math.round((double)sum/count)。

修正后的代码示例

import java.util.Scanner; 
public class InputCalculator { 
    public static void inputThenPrintSumAndAverage(){
        Scanner scanner = new Scanner(System.in);
        int sum = 0;
        int count = 0;
        
        // 正确逻辑:先判断是否有下一个整数,再读取处理
        while(scanner.hasNextInt()){
            int number = scanner.nextInt();
            sum += number;
            count++;
        }
        
        // 计算平均,同时避免count为0时的除以0异常
        long avg = 0;
        if(count > 0){
            avg = Math.round((double)sum / count);
        }
        
        System.out.println("SUM = " + sum + " AVG = " + avg);
        scanner.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:18:10