c# - 应该计算二维数组中相邻单元格的类在 C# 中计算不正确
问题描述
我用 C# 编写了一个类,用于计算二维数组中相邻的活细胞。假设我有一个这样的数组
int[,] array = new int[8, 8]
{
{3, 3, 3, 3, 3, 3, 3, 3},
{3, 0, 0, 0, 0, 0, 0, 3},
{3, 0, 0, 0, 1, 0, 0, 3},
{3, 0, 1, 0, 0, 1, 0, 3},
{3, 0, 1, 0, 0, 1, 0, 3},
{3, 0, 0, 1, 0, 0, 0, 3},
{3, 0, 0, 0, 0, 0, 0, 3},
{3, 3, 3, 3, 3, 3, 3, 3}
};
在这个阵列0
中,有死细胞、1
活细胞和3
幽灵细胞。我的班级应该计算并返回0
's 和1
's 的所有相邻活细胞。对于这个数组,如果我要打印它应该返回的邻居
0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0
0 1 1 2 1 2 1 0
0 2 1 3 3 2 2 0
0 2 2 3 3 1 2 0
0 1 2 1 2 1 1 0
0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0
相反,它返回
0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0
它似乎只计算1
任何给定活细胞的邻居。这是我的课用来计算周围的活细胞
public static int NeighbourCount(int[,] array, int x, int y)
{
int neighours = 0;
if (array[x, y] != 3)
{
if (array[x + 1, y ] == 1) { neighours++; }
else if (array[x + 1, y - 1] == 1) { neighours++; }
else if (array[x , y - 1] == 1) { neighours++; }
else if (array[x - 1, y - 1] == 1) { neighours++; }
else if (array[x - 1, y ] == 1) { neighours++; }
else if (array[x - 1, y + 1] == 1) { neighours++; }
else if (array[x , y + 1] == 1) { neighours++; }
else if (array[x + 1, y + 1] == 1) { neighours++; }
}
return neighours;
}
我不明白为什么这只返回0
's 和1
's。知道是什么导致了这个问题吗?问题可能是我如何打印课程返回吗?我这样打印
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(0); j++)
{
Console.Write(NeighbourCount(array, i, j) + " ");
}
Console.WriteLine(string.Join(" ", ascii));
ascii.Clear();
}
任何关于什么问题的解决方案或想法将不胜感激!谢谢。
解决方案
您应该检查if
语句中的所有条件,但在您的代码中,条件被检查到值为 的第一个条件true
。只需删除所有else
语句。
public static int NeighbourCount(int[,] array, int x, int y)
{
int neighours = 0;
if (array[x, y] != 3)
{
if (array[x + 1, y ] == 1) { neighours++; }
if (array[x + 1, y - 1] == 1) { neighours++; }
if (array[x , y - 1] == 1) { neighours++; }
if (array[x - 1, y - 1] == 1) { neighours++; }
if (array[x - 1, y ] == 1) { neighours++; }
if (array[x - 1, y + 1] == 1) { neighours++; }
if (array[x , y + 1] == 1) { neighours++; }
if (array[x + 1, y + 1] == 1) { neighours++; }
}
return neighours;
}
推荐阅读
- r - 过滤数据集并制作ggplot
- redis - 如何删除与 Redis 集群中的模式匹配的键
- javascript - 沿 3D javascript 数组的单轴查找最小值/最大值
- excel - 向已经维度化的数组添加一行
- python - 如何过滤具有唯一 ID 的 pandas 数据框并在其他列上执行计算?
- c - 如果 3 个相同,则检查数组中的 5 个整数
- javascript - 在 Power BI 中创建地图自定义视觉对象
- ios - 如何在 Swift 中保留时间的同时最好地将时间转换为双倍并返回
- javascript - 如何在 TypeScript 中创建本地模块
- java - Oauth 2.0 - 单个资源服务器但多个客户端应用程序