我在做作业时遇到了麻烦。在分配中,我们需要使用BFS计算从A到B的最短路径。但是,首先我要声明一个二维的布尔值字段,其中'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升(忽略L)
美姆
M.?M
M.M
M+...M
M.!M
美姆
期望产出:
假假
假真假
假真假
假真假
假真假
假假
到目前为止,我仍然可以按行输入多少字符,而不是输入所需的最大值b。
另外,控制台现在写System.Boolean,
我做错什么了?
发布于 2019-06-19 21:46:04
你的循环不像预期的那样工作!基本上,您有不必要的嵌套,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;
}
}
}编辑:我建议循环遍历数组来写出值,如果直接将对象类型提供给它,控制台就会键入对象类型。
https://stackoverflow.com/questions/56675879
复制相似问题