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

C# 修改二维数组两对角点间区域元素的方法死循环问题求解

问题根因

你的逻辑在某一轴到达终点后,步进另一轴时会直接把已完成的轴重置回起始位置,当两个轴都到达终点前,就会出现已经遍历完成的轴被重置,导致永远无法满足currentX == _endCoord.xPos && currentY == _endCoord.yPos的循环退出条件,同时最后一个对角点的元素也没有被处理。

修复方案

不需要手动处理遍历方向,先计算矩形边界的上下限值,直接双重循环遍历即可,逻辑更简洁也不会出现死循环:

struct Point {
    public int xPos;
    public int yPos;
    public Point(int _x, int _y) {
        xPos = _x;
        yPos = _y;
    }
}

//给定两个对角点,切换两点间区域的元素状态
static void ToggleBits(Point _startCoord, Point _endCoord) {
    // 计算矩形的X轴范围
    int minX = Math.Min(_startCoord.xPos, _endCoord.xPos);
    int maxX = Math.Max(_startCoord.xPos, _endCoord.xPos);
    // 计算矩形的Y轴范围
    int minY = Math.Min(_startCoord.yPos, _endCoord.yPos);
    int maxY = Math.Max(_startCoord.yPos, _endCoord.yPos);
    
    // 遍历整个矩形区域
    for (int x = minX; x <= maxX; x++)
    {
        for (int y = minY; y <= maxY; y++)
        {
            Console.WriteLine($"{x},{y}");
            lightMap[x, y] = !lightMap[x, y];
        }
    }
}

该方案优势:

  • 自动支持任意方向的对角点输入,不需要手动处理步进方向
  • 没有死循环风险,逻辑清晰易维护
  • 自动覆盖单点重合的场景,不需要额外做特殊判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:39:02