如何将布尔值的二维字段写入控制台?
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;
}
}
}
编辑:我建议循环遍历数组来写出值,如果直接将它提供给控制台,控制台只会键入对象类型。
我在做这个家庭作业时遇到了问题。在作业中,我们需要使用 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;
}
}
}
编辑:我建议循环遍历数组来写出值,如果直接将它提供给控制台,控制台只会键入对象类型。