如何将布尔值的二维字段写入控制台?

How do I write a 2D field of booleans to the console?

我在做这个家庭作业时遇到了问题。在作业中,我们需要使用 BFS 计算从 A 到 B 的最短路径。但是,首先我要声明一个 2D 布尔值字段,其中 'true' 是可通过的图块,而 'false' 是不可通过的。只有字符:.+?!都过得去,其他的都过得去。

在第一行,我声明了平面的长度和宽度,用整数 h 和 b(忽略 m)表示。字段的长度正确完成,但宽度却不正确。宽度应该是等于 b 的字符数。 这是我目前所拥有的。

static void Main()
{
        int b, h;
        string m;

        string firstLine = Console.ReadLine();
        string[] declaration = firstLine.Split(' ');
        int.TryParse(declaration[0], out b);
        int.TryParse(declaration[1], out h);
        m = declaration[2];

        var input = new bool[h,b];
        for (int i = 0; i < h ; i++)
        {
            string s = Console.ReadLine();

            for (int j = 0; j < b ; j++)
            {
                foreach( char c in s)
                {

                    if (c.Equals('.') || c.Equals('!') || c.Equals('+') || c.Equals('?'))
                    {
                        input[i, j] = true;
                    }
                    else
                    {
                        input[i, j] = false;
                    }
                }
            } 
        }
        Console.WriteLine(input);
        Console.ReadLine();
    }
}

具有所需输出的输入示例:
输入:
6 6 L(忽略L)
MMMMMM
M...?M
M....M
M+...M
M...!M
嗯嗯嗯

期望的输出:
假假假假假假假
假真真真真真假
假真真真真真假
假真真真真真假
假真真真真真假
假假假假假假假

到目前为止,我仍然可以在每行中输入任意数量的字符,而不是所需的最大 b。

控制台现在也写 System.Boolean[]

我做错了什么?

你的循环没有按预期工作!你基本上有不必要的嵌套,foreach 循环遍历整个字符串,而二维数组保持在同一索引上,而且只要给出输入,代码就会转到数组的右边,而不是向下。 为了解决这两个问题,我首先循环遍历 y 值并删除 foreach 循环:

for (int y = 0; y < b ; y++)
        {
            string s = Console.ReadLine();

            for (int x = 0; x < h ; x++)
            {
                    char c = s[x];

                    if (c.Equals('.') || c.Equals('!') || c.Equals('+') || c.Equals('?'))
                    {
                        input[x, y] = true;
                    }
                    else
                    {
                        input[x, y] = false;
                    }

            } 
        }

编辑:我建议循环遍历数组来写出值,如果直接将它提供给控制台,控制台只会键入对象类型。