C#是否有一种紧凑的方法可以在二维阵列中获取多个坐标?
尝试建立connect4,我想检查一列(垂直)是否已满,因此简单的方法是使用C#是否有一种紧凑的方法可以在二维阵列中获取多个坐标?,c#,arrays,for-loop,multidimensional-array,console-application,C#,Arrays,For Loop,Multidimensional Array,Console Application,尝试建立connect4,我想检查一列(垂直)是否已满,因此简单的方法是使用[I,1]!=O&[i,2]!=O&[i,3]!=O等等,但是没有更有效的方法来解决这个问题吗 一块板看起来像: O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O for循环: for (int i = row - 1; i > -1; i--) { if (bo
[I,1]!=O&[i,2]!=O&[i,3]!=O
等等,但是没有更有效的方法来解决这个问题吗
一块板看起来像:
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
for循环:
for (int i = row - 1; i > -1; i--)
{
if (board[i, column].ToString() == "O" && beurt % 2 == 0)
{
board[i, column] = (Veld)player1.color;
beurt += 1;
break;
}
else if(board[i, column].ToString() == "O" && beurt % 2 == 1)
{
board[i, column] = (Veld)player2.color;
beurt += 1;
break;
}
else if(???)
{
//???
}
}
或
要获取第一个非完整行,请执行以下操作:
int FirstNonFull(char[,] array)
{
for(int i=0;i<array.GetLength(1);i++)
if(!isRowFull(array, i)) return i;
return -1; // -1 indicating that all rows are full (not found)
}
int FirstNonFull(字符[,]数组)
{
对于(int i=0;i类似地,您可以使用Linq验证行中的所有项是否等于O
:
public static bool IsRowEmpty(char[,]board, int row)
{
return Enumerable.Range(0, board.GetUpperBound(1)).All(col => board[row, col] == 'O');
}
你不需要任何{}关于for循环或if?对不起,我对这一点有点陌生。@郑荣才-如果这只是一条语句,那就不是了。为了保持一致性/可读性,我还是花了很多时间放在这里,但从技术上讲,你不需要放在这里。如果你嵌套多个循环/if,并且不使用括号,那么它也会很快变得令人困惑……因为for中只有一行代码,不需要有{}(但您可以)。如果有更多的代码行,{}是必需的请注意返回true;
在for循环之外,这意味着if函数没有在for循环内部返回任何内容(不存在零)到目前为止,它已经满了,所以你应该总是把括号放进去,即使是单行。我的学生们一直都看到它;他们只有一行,一开始运行良好,但后来他们决定添加更多代码,无法找出错误在哪里……第一行在底部吗?
if(isRowFull(board, 3))
{
//your code
}
int FirstNonFull(char[,] array)
{
for(int i=0;i<array.GetLength(1);i++)
if(!isRowFull(array, i)) return i;
return -1; // -1 indicating that all rows are full (not found)
}
public static bool IsRowEmpty(char[,]board, int row)
{
return Enumerable.Range(0, board.GetUpperBound(1)).All(col => board[row, col] == 'O');
}