Java 如何调用定义';而';循环定义一个';如果';内部声明称';而';环

Java 如何调用定义';而';循环定义一个';如果';内部声明称';而';环,java,Java,我刚刚为游戏“tictactoe”编写了一个Java程序(我已经用Java编写了一个多月了,这是我目前为止第二大的项目)。它运行良好,一切正常;我的问题更多的是“清理”我的代码。代码中的主要动作是这样一个大的“while”循环,它的开头包含这样一个丑陋的语句: while (contains(player1Selections, winningArray1) && contains(player1Selections, winningArray2) && con

我刚刚为游戏“tictactoe”编写了一个Java程序(我已经用Java编写了一个多月了,这是我目前为止第二大的项目)。它运行良好,一切正常;我的问题更多的是“清理”我的代码。代码中的主要动作是这样一个大的“while”循环,它的开头包含这样一个丑陋的语句:

while (contains(player1Selections, winningArray1) &&
contains(player1Selections, winningArray2) && 
contains(player1Selections, winningArray3) &&
contains(player1Selections, winningArray4) &&  
contains(player1Selections, winningArray5) && 
contains(player1Selections, winningArray6) &&
contains(player1Selections, winningArray7) && 
contains(player1Selections, winningArray8) &&
contains(player2Selections, winningArray1) && 
contains(player2Selections,winningArray2) && 
contains(player2Selections,winningArray3) &&
contains(player2Selections, winningArray4) && 
contains(player2Selections, winningArray5) && 
contains(player2Selections, winningArray6) &&
contains(player2Selections, winningArray7) && 
contains(player2Selections, winningArray8)) {
为了澄清,我在这里检查玩家1的坐标选择数组列表或玩家2的坐标选择数组列表是否包含每个可能胜利模式的八个硬编码3元素长数组中的任何一个(我在布尔'contains'方法中将其转换为数组列表,这样我就可以对两个数组列表使用'containsAll'方法(我从堆栈溢出论坛获得了这个想法,出其不意))

顺便提一下,我设置了我的“contains”方法,这样当玩家1选择的数组列表不包含获胜数组1的数组列表时,contains(player1Selections,winningArray1)就会精确地显示为真-这就是循环工作的原因(当一个玩家的选择包含获胜数组列表时,它会停止)。(很抱歉名称混淆。)

那么,我的问题是什么呢?我的问题是,当玩家1或玩家2做出获胜的动作时,我需要在打印最终棋盘之前出现“玩家[x]获胜!”的短语,显示出零和十字的最终位置(如果是平局,我需要在打印最终棋盘之前出现“平局”一词),我解决这个问题的方法非常混乱。循环的主要部分由以下代码组成:

    if (togglePlayer == 0) {
    if (n1 == 0 && n2 == 0) {
    if (coordinate00.equals(" ")) {    // coordinate00 is a string
   coordinate00 = "X";
   player1Selections.add(0.0);          //the hard-coded winning-arrays consist of doubles in this format
   togglePlayer ++;}                   
   else { System.out.println("Position already occupied."); }
  }                   // this is closing the second 'if' statement but not the first, which gets closed only before I start writing out similar stuff for player 2
下面是我在循环的最后一部分中放置的内容(在所有上述语句之后),作为我问题的解决方案:

   if (contains(player1Selections, winningArray1) &&
  contains(player1Selections, winningArray2) && 
  contains(player1Selections, winningArray3) &&
    contains(player1Selections, winningArray4) &&
   contains(player1Selections, winningArray5) && 
    contains(player1Selections, winningArray6) &&
    contains(player1Selections, winningArray7) &&
    contains(player1Selections, winningArray8) &&
    contains(player2Selections, winningArray1) && 
    contains(player2Selections,winningArray2) && 
     contains(player2Selections,winningArray3) &&
    contains(player2Selections, winningArray4) && c 
   contains(player2Selections, winningArray5) && 
 contains(player2Selections, winningArray6) &&
    contains(player2Selections, winningArray7) && 
     contains(player2Selections, winningArray8)) {
       if ((!coordinate00.equals(" ")) & (!coordinate10.equals(" ")) &  
       (!coordinate20.equals(" ")) & (!coordinate01.equals(" ")) & 
         (!coordinate11.equals(" ")) &
     (!coordinate21.equals(" ")) & (!coordinate02.equals(" ")) & 
     (!coordinate12.equals(" ")) & (!coordinate22.equals(" "))) {
      System.out.println("Draw");
      System.out.println("\n" + coordinate00 + "|" + coordinate10 + "|" + coordinate20 + "\n" + "-----" + "\n" + coordinate01 + "|" + coordinate11 + "|" + coordinate21 + "\n" +"-----" + "\n" + coordinate02 + "|" + coordinate12 + "|" + coordinate22 + "\n");
      return;
  }
  else { System.out.println("\n" + coordinate00 + "|" + coordinate10 + "|" + coordinate20 + "\n" + "-----" + "\n" + coordinate01 + "|" + coordinate11 + "|" + coordinate21 + "\n" +"-----" + "\n" + coordinate02 + "|" + coordinate12 + "|" + coordinate22 + "\n");
显然,这最后一段代码真正愚蠢的地方是,我必须逐字重复我的“if”语句的“while”循环条件,即使“if”语句仍然在“while”循环本身中。我必须这样做,因为我无法找到任何更简洁的方法来确保程序打印野猪只有在比赛没有结束的情况下,他才会马上离开

现在,我确实有了一个想法,如何使它不那么混乱,但我真的不知道这是否可能…基本上,我只是想知道是否有任何方法可以“调用”我以前的“while”循环条件,而不是为“if”语句再次写出它们。我想说“这个if语句的条件与“while”循环完全相同。”现在仍然有效。”

这个问题可能无法回答,但知道这是一件不可能完成的事情也会很有用。

通过“winningArray8”创建一个数组列表。我们将该列表称为“winningMoves”。如果player2selections是您自己的自定义类,您可以向其中添加一个“contains”函数遍历整个列表。然后,您的循环看起来更像:

while (player1Selections.contains(winningMoves) 
    || player2Selections.contains(winningMoves)) { ... }

一些棋盘游戏可以通过将棋盘表示为单个字符串来简化,然后使用诸如
board.contains(“”)
之类的字符串操作,而不是拼写每个坐标。

您可以创建一个函数来测试所有这些条件,并返回true或false。“我刚刚编写完一个Java程序…”那么这是Java还是JavaScript呢?把你的条件列成一个函数是个好主意