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

Java统计成绩代码运行后卡在for循环无法结束是什么原因?

问题原因分析
  • 死循环直接原因:for循环的步进表达式填写错误。for循环的运行逻辑是每次执行完循环体后,执行步进表达式,再判断循环条件是否成立。你的代码中循环条件判断的是i是否小于等于数组长度减1,但步进表达式写的是a++,整个循环过程中从未修改i的值,i始终为0,循环条件永远成立,因此程序会一直要求输入成绩,无法结束运行。同时你将统计高于平均分人数的变量a作为循环步进变量,两处逻辑同时修改a的值,也会导致最终统计结果完全错误。
  • 业务逻辑错误:平均分需要所有5个成绩全部输入、总和累加完成后才能计算出正确值,你在每输入一个成绩时就计算平均分,此时总和未累加完成,得到的平均分是错误值,后续的高低分统计结果自然也不正确。
修正方案

调整循环结构,拆分为两个独立循环:第一个循环仅负责录入成绩、累加总分;所有成绩录入完成后再计算平均分;第二个循环遍历成绩数组统计高于、低于、等于平均分的人数。修正后代码如下:

import java.util.*;
public class Array {
    public static void main(String[] args) {
        double sum = 0;
        double average = 0;
        int above = 0, below = 0, equal = 0;
        double [] tests = new double [5];
        
        Scanner in= new Scanner(System.in);
        System.out.println("请输入5个测试成绩");
        // 第一个循环:录入成绩、累加总分
        for(int i = 0; i < tests.length; i++){
            double grade = in.nextDouble();
            tests[i] = grade;
            sum += grade;
        }
        // 计算最终平均分
        average = sum / 5;
        // 第二个循环:统计各区间人数
        for(int i = 0; i < tests.length; i++){
            if(tests[i] > average){
                above++;
            }else if(tests[i] < average) {
                below++;
            }else {
                equal++;
            }
        }
        
        System.out.println("输入的测试成绩为:" + Arrays.toString(tests));
        System.out.println("平均分为:" + average);
        System.out.println("高于平均分的人数:" + above);
        System.out.println("低于平均分的人数:" + below);
        System.out.println("等于平均分的人数:" + equal);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:57:03