【问题标题】:Converting 1D array to 2D array regarding FOR loops Processing关于 FOR 循环处理将一维数组转换为二维数组
【发布时间】:2018-12-12 03:24:14
【问题描述】:

我正在计算机科学课上使用处理来开发井字游戏。在我的程序中,我正在编写一个 3 in a row checker,我正在尝试使用 2D 数组代码对此进行编码,因为在对 X / O 进行编码时,我的数组被初始化为 2D 数组。此外,我的老师给了我们一个执行此代码但在一维数组中的示例,因此我不知道如何将他关于 FOR 循环的示例转换为二维,以便它可以运行到我的程序中。我已将数组代码转换为应用于我的程序,并且它正在运行,但是关于是否有人获胜的代码(FOR 循环)不起作用。有人能帮我吗?

void onlyX() { //views only X pieces, runs checker for onlyX (attempted to 
convert to 2D array form)
    for (int i=0; i<3; i++) {
      for (int j=0; j<3; j++) {
        if (boardPiece[i][j] == "X") {
          onlyXPiece[i][j] = "X";
        }
      }
    }
  }

  /*void onlyX() { //1D Form 
    for (int i=0; i<numberOfBoardPieces; i++) {
      if (boardPiece[i] == "X") {
        onlyXPiece[i] = "X";
      }
    }
  }*/

void onlyO() { //views only O pieces, runs checker for onlyO (attempted to 
convert to 2D array form)
   for (int i=0; i<3; i++) {
     for (int j=0; j<3; j++) {
       if (boardPiece[i][j] == "O") {
         onlyOPiece[i][j] = "O";
        }
      }
    }
  }

  /*void onlyO() { //1D form
    for (int i=0; i<numberOfBoardPieces; i++) {
      if (boardPiece[i] == "O") {
        onlyOPiece[i] = "O";
      }
    }
  }*/

【问题讨论】:

  • 这是什么语言的?
  • @GBlodgett 这是在 Java 处理中

标签: java arrays for-loop processing


【解决方案1】:

您的 2D 数组 FOR 循环(通常称为双 FOR LOOP)看起来不错,但我不太明白为什么要将 X 和 O 放在单独的 2D 数组中。有多种方法可以检查获胜条件,但这似乎过于复杂。

我调整了代码顶部的双 for 循环,以执行易于理解且可用于 X 和 O 的获胜检查。不要忘记,您还必须检查垂直和对角线获胜。

String[][] boardPiece = {{"X", "", "O"}, 
                         {"O", "O","O"}, 
                         {"X", "", "X"}};

void setup() {
  println("X wins = "+ str(checkRows("X")));
  println("O wins = "+ str(checkRows("O")));
}

boolean checkRows(String XorO) { 
  for (int i=0; i<3; i++) { //for every row
    boolean win = true;     //set win to true
    for (int j=0; j<3; j++) { //for every column    
      if (boardPiece[i][j] != XorO) {  //if the column does not equal the sign that you are checking
        win = false;                   // meaning its the other, or it's empty, then set win to false
      }                                
    }
    if (win) {
      return true;    //if win is true, then there are 3 X's or 3 O's in this row, so return true
    }
  }
  return false;      // if none of the rows contain 3 equal, return false
}

【讨论】:

  • 感谢您的回复,意义重大。我只是想知道您何时定义 boardpiece 这三个括号是什么,它们是什么意思?
  • 这是一种实例化数组的简单方法:processing.org/reference/Array.html - String[] 是一个字符串数组 String[][] 是一个二维字符串数组。 { a, b } 用条目 a 和 b 填充数组。
  • 感谢您的回复,所以现在我知道了板件是什么,为了使其正常工作,我需要根据放置正确的 X 和 O 来填充括号?
  • 正确。类似的东西:如果鼠标点击在顶部中间的瓷砖区域,把 X 放在 boardpiece[0][1]
  • 感谢您对我的问题的帮助,我现在有一个功能齐全的基本井字游戏。我现在正在进入游戏的 AI 部分,希望我不会遇到任何麻烦,我会尝试自己解决我的问题。如果我确实需要帮助,我会希望将其发布在这里,非常感谢您的帮助! :)
【解决方案2】:

要检查某人是否赢得了比赛,您必须检查列、行和对角线。编写一个带有一个参数的checkBoard 函数,您可以在其中指定要检查的工件类型("X" pr "O"):

boolean checkBoard(String p) {

    boolean won = false;

    // check rows and columns
    for (int i=0; !won && i<3; i++) {
        boolean eqRow = true;
        boolean eqCol = true;
        for (int j=0; j<3; j++) {
            eqRow = eqRow && boardPiece[i][j] == p;
            eqCol = eqCol && boardPiece[j][i] == p;
        }
        won = eqRow || eqCol;
    }

    // check diagonals
    if ( !won )
    {
        boolean d1 = true;
        boolean d2 = true;
        for (int i=0; !won && i<3; i++) {
            d1 = d1 && boardPiece[i][i] == p;
            d2 = d2 && boardPiece[2-i][i] == p;
        }
        won = d1 || d2;
    }

    return won;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多