java - 正确使用 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 中不被识别。但是,我想合并这种行为。
非常感谢您对此的任何指示。
谢谢!
解决方案
将标签放在循环结构上:
outerWhileLabel:
while (true) {
out.append("Enter a move for " + m.getTurn().toString() + ":\n");
// other code
while {
// other code
continue outerWhileLabel;
}
// other code
}
给你的标签起一个比“标签”更好、更有意义的名字。
推荐阅读
- json - 如何使用 MongoDB 访问数组的数组
- database - 如何使用oracle数据库提供数据并发?
- python - 如何在 Gurobi 的目标方程中定义多项式的更高幂?
- android - 任务 ':app:mergeExtDexDebug' 执行失败。在实施 Firebase 消息传递时
- react-native - 加载依赖关系图...jest-haste-map: Watchman crawl failed
- php - 我的密码哈希不起作用它在登录时运行我的其他代码
- java - 添加启动画面时,webview URL 未通过 FCM 更新
- architecture - 如果对 Sawtooth 网络节点对等方广播的“单个请求”收到“多个响应”会发生什么?
- qt - 如何在 QML 视图中修改 HTML 文本?
- firebase - 选择或将 Firestore 项目传递到新页面(路由)