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
相关产品推荐
相关产品推荐

