【问题标题】:How to check the elements of a row in a 2D Array如何检查二维数组中一行的元素
【发布时间】:2020-06-14 20:06:33
【问题描述】:

所以,我想做的是一场三连胜的比赛,到目前为止,我已经成功地做到了,但是在获得胜利方面我有点挣扎,因为我需要检查一下行、列或对角线的所有元素都是相同的。

到目前为止,我已经设法通过使用布尔值、计数器和 for 循环来使其工作。这是我的代码外观的示例

//Code to check the rows horizontally
public void checkH(){
int cont1 = 0;
Boolean winner1 = false;
for(int i=0;i<size;i++){
    if(a[0][i]==1 || a[1][i]==1 || a[2][i]==1){
        cont1++;
        if(cont1==3){
            winner1 = true;
        }

所以,正如你们所看到的,我在该代码中所做的是告诉程序,如果任一行中的数组等于 1,并且当它遍历所有位置时是否发生相同的情况行,然后计数器将加一,一旦计数器达到 3,布尔值将为真,并且会有赢家,但这里有一个问题:例如,如果 2D 数组看起来像这样:

int a[][] = {{1,0,0},
         {1,1,0},
         {0,0,0}};

然后计数器仍然打到三个,即使它们没有对齐。我知道我没有在程序中指定那种条件,但这就是我正在努力解决的问题。我想做的是能够用循环来制作那个条件,这样我就不必用 if 语句填充整个事情。

你们可以在这方面给我的任何线索将不胜感激。提前致谢!

【问题讨论】:

    标签: arrays if-statement boolean


    【解决方案1】:

    如果您发现很难在网络上搜索解决方案/教程,请注意三连胜游戏也称为 tic-tac-toe .所以,如果你搜索“tic tac toe algorithm”,你会发现几个关于如何解决它的例子,因为它是一个比较常见的面试问题。 Here is a reference 为读者提供方便。

    现在,为了使用 for 循环而不是链式 ifs(或具有多个逻辑比较的 if),它是一个关于矩阵的行、列和对角遍历的问题。这是row and column traversals 的参考,这是diagonal traversal 的另一个参考。

    具体到您的问题,下面是一个伪代码,显示使用 for 和单元格值检查列和行以具有少量 if 语句。但请注意,这只是一个示例,因为有许多有趣的方法可以解决井字游戏,您可能想看看,从 traversing treesusing a string and regex

    public bool checkRow() { 
    
      int i, j; 
      int count = 0;
    
      // accessing element row wise 
      for (i = 0; i < MAX; i++) { 
        for (j = 0; j < MAX; j++) { 
            // Considering we were checking for 1
            // And array can have 0 or 1
            // You can add the cell value and avoid an if
            count += arr[i][j];
           // if you go with arr[j][i] you will be traversing the columns and not the rows.
        } 
    
        // if all cells in the row are 1, we have a winner
        if(count == MAX)
            return true;
      } 
    
      return false
    } 
    

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      相关资源
      最近更新 更多