【问题标题】:How can I shorten my if statement in a tictactoe game for checking rows etc?如何在 tictactoe 游戏中缩短 if 语句以检查行等?
【发布时间】:2015-06-29 06:56:27
【问题描述】:

我想连续检查我的行中的 x 和 o。

这是我目前所拥有的:

if (gameboard[0] == 1 && gameboard[1] == 1 && gameboard[2] == 1) {
     return winner;
}

这对我来说很好。我想知道的是如何减少这里的代码量,而不是加载 if 语句来检查每一列行,特别是如果我决定让网格更大的话。

我尝试了以下操作

for (int i = 0; i < 3; i++) {
    gameboard[i] = 1;
}
return winner;

但这并没有做任何事情。任何帮助表示赞赏。

【问题讨论】:

  • 您的第二个变体根本没有做同样的事情。它应该吗?其中没有条件(和赋值)。对于通用网格大小,您确实会使用循环。
  • 试试if(gameboard[i] != 1) return false

标签: java arrays eclipse if-statement


【解决方案1】:

让你知道

for (int i = 0; i<3; i++){
    gameboard[i] = 1;
}
return winner;

gameboard[i] 设置为1 不检查gameboard[i] == 1。但如果你愿意,你可以这样做

int x = 3, p =0;
for (int i = 0; i < x; i++)
{
    if (gameboard[i] == 1)
         p++;
}
if (p == x)
    return winner;

【讨论】:

  • 如果第一个为零,则无需继续循环
【解决方案2】:

要检查行胜,例如:

  boolean win = true;
  for (int col = 0; col < grid.length; col++) {
     if (grid[col][j] != turn) {
        win = false;
     }
  }

可以在 turn 为刚转弯的玩家持有 XO 枚举的情况下工作,而 grid 是这个枚举的 2D 数组(或 null)。

例如,

   public void checkForWin(int i, int j) {
      boolean win = true;
      for (int col = 0; col < grid.length; col++) {
         if (grid[col][j] != turn) {
            win = false;
         }
      }
      if (!win) {
         win = true;
         for (int row = 0; row < grid[i].length; row++) {
            if (grid[i][row] != turn) {
               win = false;
            }
         }
      }
      if (!win && i == j) {
         win = true;
         for (int k = 0; k < grid.length; k++) {
            if (grid[k][k] != turn) {
               win = false;
            }
         }
      }
      if (!win && i + j == 2) {
         win = true;
         for (int k = 0; k < grid.length; k++) {
            if (grid[k][2 - k] != turn) {
               win = false;
            }
         }
      }

      if (win) {
         setGameOver(true);
      }

   }

我的枚举:

public enum XO {
   X("X"), O("O"), BLANK("   ");
   private String text;

   private XO(String text) {
      this.text = text;
   }

   public String getText() {
      return text;
   }
}

这源于我对类似问题的回答:here。另请查看此答案here

【讨论】:

  • win = false; break; 怎么样?
【解决方案3】:

..或者你可以这样做

int x = 3, p = 0, i = 0;
while (i < x && p != x && p < gameboard.length) {
    if (gameboard[i] == 1) p++;
    if (p == x) {
        System.out.println("eee2");
        return winner;
    }
    i++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 2012-07-05
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    相关资源
    最近更新 更多