【问题标题】:C# Is there a compact way to get more than one coordinate in a 2d-array?C# 是否有一种紧凑的方法可以在二维数组中获取多个坐标?
【发布时间】:2019-08-15 19:27:45
【问题描述】:

尝试进行 connect4 并且我想检查一列(垂直)是否已满,因此最简单的方法是使用 if[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(???)
     {
             //???
     }
}

【问题讨论】:

  • 第一行是在底部吗?

标签: c# arrays for-loop multidimensional-array console-application


【解决方案1】:
bool isRowFull(char[,] array, int row)
{
    for(int i=0;i<array.GetLength(0); i++)
        if(array[row, i] == 'O') return false;
    return true;
}

你可以这样称呼它:

bool isFull = isRowFull(board, 3); // check if row 3 is full 

if(isRowFull(board, 3))
{
    //your code
}

获取第一个 NonFull 行:

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)
}

【讨论】:

  • for 循环或 if 不需要任何 { }?抱歉,我对此有点陌生。
  • @Zheng-rongCai - 如果它只是一个声明,则不会。我仍然花了很多时间来保证一致性/可读性,但从技术上讲,你不需要在这里。如果你嵌套多个循环/ifs 并且不使用括号,它也会很快变得混乱......
  • 因为里面只有一行代码,所以不需要{}(但你可以)。如果需要更多代码行 {} 是必要的
  • 请注意 return true; 在 for 循环之外,这意味着如果函数在 for 循环内没有返回任何内容(不存在零)并且达到了这么远,那么它已满,所以返回 true跨度>
  • 你应该总是把括号放在里面,即使是单行。我一直在我的学生身上看到它;他们只有一行,最初工作正常,但后来他们决定添加更多代码并且无法弄清楚错误在哪里......
【解决方案2】:

类似地,您可以使用 Linq 验证 row 处的 All 项目是否等于 O

public static bool IsRowEmpty(char[,]board, int row)
{
    return Enumerable.Range(0, board.GetUpperBound(1)).All(col => board[row, col] == 'O');
}

【讨论】:

    猜你喜欢
    • 2016-09-12
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多