我正在尝试为我的代码设置条件检查。但是,代码变得冗长而复杂。我需要一个可以轻松完成工作的简单版本的代码。
我试图比较用括号分隔的三个布尔值,这样我只比较两个值。
if (
(((userState[0][0]&&userState[0][1])&&(userState[0][2]))) ||
(((userState[1][0]&&userState[1][1])&&(userState[1][2]))) ||
(((userState[2][0]&&userState[2][1])&&(userState[2][2]))) ||
(((userState[0][0]&&userState[1][0])&&(userState[2][0]))) ||
(((userState[0][1]&&userState[2][1])&&(userState[1][1]))) ||
(((userState[0][2]&&userState[2][2])&&(userState[1][2]))) ||
(((userState[0][0]&&userState[2][2])&&(userState[1][1]))) ||
(((userState[1][2]&&userState[1][1])&&(userState[2][0])))
)
答案 0 :(得分:3)
您可以使用嵌套循环:
boolean result;
for (int i = 0; i < userState.length; i++) {
for (int j = 0; j < userState[i].length; j++) {
result |= userStage[i][j];
}
}
答案 1 :(得分:1)
干净的代码建议不要一开始就编写此类代码。
如果有的话,例如,您可以为每行创建小的辅助方法,例如:
private hasStateConditionXyz(boolean[][] userState) {
return userState[0][0]&&userState[0][1])&&(userState[0][2];
}
其中“ Xyz”将是一个漂亮的好名字,它告诉读者该支票的意图是什么。
当然,这破坏了您对数组进行循环的能力。
换句话说:
最后,真正的答案可能是退后一步,着眼于要解决的整体问题。含义:当您拥有如此复杂的“状态机”时,最好创建一个状态机。或使用某种“工作流程”引擎。这样的工具使您能够以更加简洁和易读的方式表达这种复杂的(业务?)规则。