首页 > 解决方案 > 正确使用 Java 标签

问题描述

我正在尝试正确使用 JAVA 中 go to 语句的替代方法。我不确定“标签”是否适合 go to 语句。

我正在尝试在我的井字游戏控制器中执行以下操作..

try {
      out.append(m + "\n");
      while (true) {
        out.append("Enter a move for " + m.getTurn().toString() + ":\n");
        label:
        {
          String element1 = scan.next();
          if (quitGameHelper(element1, m)) {
            return;
          }
          String regex = "[-+]?\\d+";
          boolean showInFirstAttempt = false;
          while (!Pattern.matches(regex, element1)) {
            if (quitGameHelper(element1, m)) {
              return;
            }
            if (!Pattern.matches(regex, element1)) {
              out.append("Not a valid number: " + element1 + "\n");
              goto label;
            }
            element1 = scan.next();
          }

          String element2 = scan.next();
          if (quitGameHelper(element2, m)) {
            return;
          }
          while (!Pattern.matches(regex, element2)) {
            if (quitGameHelper(element2, m)) {
              return;
            }
            if (!Pattern.matches(regex, element2)) {
              out.append("Not a valid number: " + element2 + "\n");
              goto label;
            }
            element2 = scan.next();
          }

          element1Int = Integer.parseInt(element1) - 1;
          element2Int = Integer.parseInt(element2) - 1;
          try {
            m.move(element1Int, element2Int);
            out.append(m + "\n");
          } catch (IllegalArgumentException e) {
            out.append("Not a valid move: " + (element1Int + 1) + ", " + (element2Int + 1) + "\n");
          }

          final boolean gameOver = m.isGameOver();
          if (gameOver) {
            final Player winner = m.getWinner();
            if (winner == null) {
              out.append("Game is over! Tie game.");
            } else {
              out.append("Game is over! " + winner + " wins.");
            }
            return;
          }
        }
      }
    }

我意识到goto label在 JAVA 中不被识别。但是,我想合并这种行为。

非常感谢您对此的任何指示。

谢谢!

标签: java

解决方案


将标签放在循环结构上:

outerWhileLabel:
while (true) {
    out.append("Enter a move for " + m.getTurn().toString() + ":\n");
    // other code
    while {
        // other code 
        continue outerWhileLabel;
    }
    // other code
}

给你的标签起一个比“标签”更好、更有意义的名字。


推荐阅读