Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#是否有一种紧凑的方法可以在二维阵列中获取多个坐标?_C#_Arrays_For Loop_Multidimensional Array_Console Application - Fatal编程技术网

C#是否有一种紧凑的方法可以在二维阵列中获取多个坐标?

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

尝试建立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 (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');
}