如何解决应该在2D数组中对相邻单元进行计数的类在C#
我已经用C#语言编写了一个类,该类对2D数组中的相邻活动单元进行计数。假设我有一个像这样的数组
int[,] array = new int[8,8]
{
{3,3,3},{3,1,3}
};
在此数组中,0
是死细胞,1
是活细胞,3
是鬼细胞。我的课堂应该计算并返回0
和1
的所有相邻活动单元格。对于这个数组,如果我要打印邻居,它应该返回
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) { 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
和1
。知道是什么原因引起的吗?问题可能是我如何打印班级退货?我这样打印
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) { 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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。