C#使用for循环遍历多维数组累加得分结果异常如何解决
问题根因
代码计算结果错误源于两处逻辑偏差:
- 分数累加逻辑完全错位:内层
j循环的作用是遍历当前洞的4位球手得分,索引j=0到j=3分别对应1到4号球手,但原代码不区分当前遍历的球手,把每一个单洞得分同时加到4个总分变量中,最终四个总分值完全相等,数值等于4位球手所有已遍历洞的得分总和,根本不是单个球手的独立总分。 - 容量与循环边界不匹配:你定义的标准杆数组、二维得分数组都是按18洞容量初始化的,但外层循环仅执行9次(
i < 9),如果要统计全场成绩需要调整循环边界,当前输出标注为Front(前九洞)则该边界暂时符合需求。
修正后代码
// 18洞标准杆数组 int[] parArray = { 4, 3, 4, 4, 5, 4, 5, 3, 4, 4, 3, 5, 4, 4, 5, 4, 3, 4}; // 二维数组存储18洞、4位球手的得分 int[,] arr = new int[18, 4]; // 初始化随机数生成器 Random randomScores = new Random(); Console.WriteLine("Hole\tPar\tGolfer 1\tGolfer 2\tGolfer 3\tGolfer 4"); int scoreTotalOne = 0; int scoreTotalTwo = 0; int scoreTotalThree = 0; int scoreTotalFour = 0; // 遍历前9洞,需统计18洞时将i < 9改为i < 18即可 for (int i = 0; i < 9; i++) { Console.Write((i + 1) + "\t"); Console.Write(parArray[i] + "\t"); for (int j = 0; j < 4; j++) { // 生成单洞随机得分,范围为标准杆-2到标准杆+2 arr[i, j] = randomScores.Next(parArray[i] - 2, parArray[i] + 3); Console.Write(arr[i, j] + "\t\t"); // 按球手索引对应累加总分 if (j == 0) scoreTotalOne += arr[i, j]; else if (j == 1) scoreTotalTwo += arr[i, j]; else if (j == 2) scoreTotalThree += arr[i, j]; else if (j == 3) scoreTotalFour += arr[i, j]; } Console.WriteLine(); } Console.WriteLine($"Front\t\t{scoreTotalOne}\t\t{scoreTotalTwo}\t\t{scoreTotalThree}\t\t{scoreTotalFour}");
修正点说明
- 调整累加逻辑:根据当前遍历的球手索引
j,将单洞得分仅累加至对应球手的总分变量,保证各球手分数独立统计。 - 优化输出格式:增加制表符间隔避免列错位,控制台打印的成绩表可读性更强。
- 保留扩展空间:如果后续需要统计18洞全场成绩,仅需修改外层循环边界,无需改动核心计分逻辑。
内容的提问来源于stack exchange,提问作者m24
相关产品推荐
相关产品推荐

