调试扫雷时遇到问题

时间:2018-06-29 05:32:19

标签: c# matrix minesweeper

我在codefights.com上遇到了一些挑战,我很难弄清为什么我的代码以这种方式工作。

https://codefightssolver.wordpress.com/2016/11/09/minesweeper/

^^^有指向其他人博客的链接,其中包含挑战字句的逐字记录。我不确定如果您未登录,是否可以看到代码战方面的挑战。

int[][] minesweeper(bool[][] matrix)
{
    int[][] mineField = new int[matrix.Length][];
    int[] mineLine = new int[matrix[0].Length];

    for (int i = 0; i < mineLine.Length; i++) { mineLine[i] = 0; }
    for (int i = 0; i < mineField.Length; i++) { mineField[i] = mineLine; }

    for (int i = 0; i < mineField.Length; i++)
    {
        for (int j = 0; j < mineField[0].Length; j++)
        {
            mineField[i][j] = findBorderMines(matrix, i, j);
            Console.Write(mineField[i][j]);
        }
        Console.WriteLine();
    }

    return mineField;
}

int findBorderMines(bool[][] matrix, int x, int y)
{
    int minX = x - 1; if (minX < 0) minX = 0;
    int minY = y - 1; if (minY < 0) minY = 0;
    int maxX = x + 1; if (maxX > matrix.Length - 1) maxX = matrix.Length - 1;
    int maxY = y + 1; if (maxY > matrix[0].Length - 1) maxY = matrix[0].Length - 1;
    int borderingMines = 0;


    for (int i = minX; i <= maxX; i++)
    {
        int j = minY;
        for (; j <= maxY; j++)
        {
            //Console.WriteLine(i + " " + j);
            if (matrix[i][j] == true && !(i == x && j == y)) { borderingMines++; }
        }
    }

    return borderingMines;
}

^^^这是我的完整代码。我知道这不是最优雅的解决方案,但我现在不需要。我的问题(我认为)与vvv下面的代码有关

for (int i = 0; i < mineField.Length; i++)
{
    for (int j = 0; j < mineField[0].Length; j++)
    {
        mineField[i][j] = findBorderMines(matrix, i, j);
        Console.Write(mineField[i][j]);
    }
    Console.WriteLine();
}

return mineField;

写入行显示正确的矩阵,但是当我返回返回的矩阵时,矩阵中的所有行都神奇地转换为matirx的最后一行。我想念什么?我希望有足够的信息来理解我正在搞砸的事情,但是我永远不会完美地将愚蠢的问题归结为一个论坛帖子。

0 个答案:

没有答案