Java 如何计算具有多个参数的布尔表达式?

Java 如何计算具有多个参数的布尔表达式?,java,Java,我正在尝试设置代码的条件检查。然而,代码变得又长又复杂。我需要一个更简单的版本的代码,可以很容易地完成这项工作 我试图比较三个用括号隔开的布尔值,这样我只比较两个值 if ( (((userState[0][0]&&userState[0][1])&&(userState[0][2]))) || (((userState[1][0]&&userState[1][1])&&(userState[1][2]))) ||

我正在尝试设置代码的条件检查。然而,代码变得又长又复杂。我需要一个更简单的版本的代码,可以很容易地完成这项工作

我试图比较三个用括号隔开的布尔值,这样我只比较两个值

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])))
)

可以使用嵌套循环:

boolean result;
for (int i = 0; i < userState.length; i++) {
 for (int j = 0; j < userState[i].length; j++) {
  result |= userStage[i][j];
 }
}

干净的代码建议从一开始就不要编写这样的代码

例如,如果有的话,您可以为每一行创建小辅助对象方法,如:

private hasStateConditionXyz(boolean[][] userState) {
  return userState[0][0]&&userState[0][1])&&(userState[0][2];
} 
其中,Xyz将是一个漂亮的名字,告诉读者该检查的意图

当然,这会破坏您以某种方式在阵列上循环的能力

换言之:

如果可能的话,看看是否有可能通过在该数组上循环来计算结果,而不是写下这样的手动模式 如果没有,请考虑使用这种命名助手方法。
最终,真正的答案可能是退后一步,看看要解决的总体问题。意思是:当你有一个如此复杂的状态机时,最好真的创建一个状态机。或者使用某种工作流引擎。这样的工具可以让您表达如此复杂的业务?以更简洁易读的方式制定规则

您可以删除所有不必要的括号。这更像是for的问题,但您可以使用for循环检查各个组合。您实际检查的是什么?似乎有各种可能的组合。那么你检查数组中是否有3个值为真?@BlakkM9否。它是一个布尔二维数组。我只是检查该位置的值是否为真并成功形成模式。我不确定这是否会存档相同的结果。但如果是这样,您可以在开始时将result设置为false,如果userStage[i][j]{result=true;break;}