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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:21:33