如何调用定义' while'循环来定义一个' if'里面的声明说'而'环

时间:2017-04-07 04:54:36

标签: java

我刚刚为游戏编写了一个Java程序" Tic tac toe" (我已经编写了一个多月的java编码,这是我迄今为止的第二大项目)。它工作正常,一切都很好;我的问题更多的是关于清理'我的代码。代码中的主要动作是这个大而且#39;而#39;循环,其开头涉及这个丑陋的陈述:

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的坐标选择的数组列表是否包含八个硬编码的任何一个每个可能的胜利模式的元素长数组(我在我的布尔值中转换'包含'方法到数组列表,所以我可以使用' containsAll'方法用于两个数组列表(我获得了这个来自Stack Overflow论坛的想法,惊喜惊喜))。

顺便提一下,需要提一下我设置的'包含'当玩家1的选择的数组列表包含获胜数组1的数组列表时,包含(player1Selections,winningArray1)的方法正确地出现 - 这就是为什么循环工作(当一个玩家的选择包含获胜阵列列表时它停止)。 (抱歉这个令人困惑的名字。)

那么我的问题是什么?我的问题是当玩家1或玩家2进行获胜动作时,我需要短语"玩家[x]获胜!"在最后一块板印刷之前出现,显示了最终位置和十字架(当有抽签时,我需要“#34; Draw"在最后一块板之前出现”打印),我解决这个问题的方式非常凌乱。循环的主要部分包括如下代码:

    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'循环本身。我必须这样做,因为我无法找到更简洁的方法来确保程序只有在游戏没有结束时才会立即打印出棋盘。

现在,我确实知道如何让它变得不那么混乱,但我真的不知道它是否可能......基本上,我只是想知道是否有&#39什么方式来打电话给'我早些时候'而循环条件,而不是再次写出'如果'声明。我想说'这个if语句的条件与''完全相同。循环仍然有效。'

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

1 个答案:

答案 0 :(得分:0)

让你的" winsArray1"通过" winsArray8"数组列表。让我们称之为List" winsMoves"。如果player2selections是您自己的自定义类,您可以添加一个"包含"迭代整个列表的函数。然后你的循环看起来更像:

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

通过将棋盘表示为单个String,然后使用board.contains(" ")等字符串操作而不是拼写出每个坐标,可以简化某些棋盘游戏。