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

C#飞行棋(Ludo)开发:For循环触发数组越界(Out of Bound)错误求助

嘿,这个数组越界问题我太熟了!咱们一步步来排查,先搞清楚核心前提:C#里的数组是0基索引的,15×15的二维数组,行和列的合法索引都是从0到14——这是最容易踩坑的点。

你说第一象限正常,第二象限触发错误,大概率是第二象限的循环逻辑里,某个索引超出了0-14的范围。我给你拆解几个常见的坑和排查步骤:

1. 先检查循环的终止条件

最常见的错误就是把循环条件写成<=15而不是<15(或者<=14)。比如你处理第二象限时,如果写了:

// 错误示例:j的终止条件到15,超出了数组最大索引14
for (int i = 0; i <= 7; i++)
{
    for (int j = 8; j <= 15; j++)
    {
        board[i, j] = 9; // 当j=15时直接触发越界
    }
}

改成j <=14或者j <15就能解决这个问题。

2. 输出错误时的索引值,精准定位

在循环里加一行打印,把当前操作的索引打出来,就能立刻看到哪个值越界了:

for (int i = ...; ...)
{
    for (int j = ...; ...)
    {
        Console.WriteLine($"当前操作索引:i={i}, j={j}");
        board[i, j] = 9;
    }
}

运行后看控制台,最后打印的那个索引就是罪魁祸首——要么是负数,要么大于14。

3. 检查象限坐标的转换逻辑

如果你的棋盘是按「中心原点」划分象限(比如以(7,7)为中心),那第二象限的逻辑坐标转数组索引时,有没有计算错误?比如是不是不小心把逻辑上的负坐标直接当成数组索引用了?举个例子:

// 错误示例:逻辑坐标转数组索引时没加中心偏移,导致负数索引
int centerX = 7, centerY =7;
// 第二象限逻辑坐标:x负,y正
for (int logicX = -7; logicX <0; logicX++)
{
    for (int logicY =1; logicY <=7; logicY++)
    {
        // 没加中心偏移,i变成负数了!
        int i = logicX; 
        int j = centerY + logicY;
        board[i,j] =9; // 这里i是负数,直接触发越界
    }
}

正确的转换应该是int i = centerX + logicX;,这样索引才会落在0-14的合法范围内。

4. 确认二维数组的索引顺序

C#二维数组的索引是[行,列],如果你搞反了行和列的逻辑(比如把列当成行来遍历),也可能在某些象限触发越界——不过第一象限正常的话这个概率低,但也可以顺手检查一下。

按照上面的步骤排查,很快就能找到问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:35:21