Class 本应计算二维数组中相邻单元格的数量在 C# 中无法正确计算
Class that is supposed to count neighboring cells in a 2D array doesn't count properly in C#
我用 C# 写了一个 class 来计算二维数组中相邻的活细胞。假设我有一个这样的数组
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
是幽灵细胞。我的 class 应该计算 return 0
和 1
的所有相邻活细胞。对于这个数组,如果我要打印邻居,它应该 return
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
相反,它 returns
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
个邻居。这是我用来计算周围活细胞的class
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;
}
我不明白为什么只有 return 和 0
和 1
。知道是什么导致了这个问题吗?问题可能是我如何打印 classes return 吗?我这样打印
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;
}
我用 C# 写了一个 class 来计算二维数组中相邻的活细胞。假设我有一个这样的数组
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
是幽灵细胞。我的 class 应该计算 return 0
和 1
的所有相邻活细胞。对于这个数组,如果我要打印邻居,它应该 return
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
相反,它 returns
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
个邻居。这是我用来计算周围活细胞的class
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;
}
我不明白为什么只有 return 和 0
和 1
。知道是什么导致了这个问题吗?问题可能是我如何打印 classes return 吗?我这样打印
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;
}