c# - 如何将布尔值的 2D 字段写入控制台?
问题描述
我在做这个家庭作业时遇到了麻烦。在作业中,我们需要使用 BFS 计算从 A 到 B 的最短路径。但是,首先我想声明一个布尔值的 2D 字段,其中“真”是可通过的图块,“假”是不可通过的。只有字符:.+?! 是可以通过的,其他的都不是。
在第一行,我声明了平面的长度和宽度,用整数 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();
}
}
具有所需输出的输入示例:
input:
6 6 L(忽略 L)
MMMMMM
M...?M
M....M
M+...M
M...!M
MMMMMM
所需输出:
假假假假假假假
真假真真真假假真真真真假假
真真真真假假
真真
真真假假
假假假假假假
到目前为止,我仍然可以在每行输入任意数量的字符,而不是所需的最大值 b。
控制台现在也写 System.Boolean[,]
我究竟做错了什么?
解决方案
您的循环没有按预期工作!你基本上有不必要的嵌套,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;
}
}
}
编辑:我建议循环遍历数组来写出值,如果你直接输入它,控制台只会输入 Object 类型。
推荐阅读
- django - Django inspectdb 不尊重两列的主键(postgres)
- python - 使用 API 密钥从 Flask RESTful API 获取
- python - 在列表中读取和输出使用它的行的脚本
- java - 如何修复最常见的 LazyInitializationException - Hibernate JPA
- django - 如何设置错误报告以归档而不是电子邮件
- python - argsparse 组互斥
- django - 在 heroku 上,celery beat 数据库调度程序不运行定期任务
- java - 为什么clone()函数在构造函数中赋值时会显示不兼容的类型?
- python - 如何抓取基于 word press 的页面?分别如何登录请求用户名和密码的页面
- java - 使用 cURL 从我的 API 获取 XML 和 JSON 数据