我在做家庭作业时遇到麻烦。在分配中,我们需要使用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
MMMMMM
所需的输出:
假假假假假
false true true true true true false
false true true true true true false
false true true true true true false
false true true true true true false
错误错误错误错误错误错误
到目前为止,我仍然可以根据需要在每行中键入任意多个字符,而不是所需的最大b。
控制台现在也写System.Boolean [,]
我在做什么错了?
答案 0 :(得分:1)
您的循环无法正常工作!您基本上有不必要的嵌套,foreach循环将遍历整个字符串,而2D数组则保持在相同的索引上,而且每当给出输入时,代码都将在数组的右侧而不是向下移动。 要解决这两个问题,我会先遍历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;
}
}
}
编辑:我建议循环遍历数组以写出值,如果直接将其输入给它,则控制台将只键入对象类型。