2017-02-10 163 views
1

我有8个布尔值。当8个布尔值中的一个或多个布尔值错误时,我想要回滚。如何在java中检查multible布尔值true或false>

boolean flag = false; 
     boolean flag1 = false; 
     boolean flag2 = false; 
     boolean flag3 = false; 
     etc,,. 

flag = dbCall... 

这里标志值的变化。

在这里,我必须手动检查像

if(flag == false && flag1 == false && ....){ 
     userTransaction = rollback; 
    }else{ 
    userTransaction = commit; 
    } 

有没有简单的方法来检查在Java multple布尔值。

+1

你不检查,但在你的第二个例子中分配。 – alex

+0

否定之间的简单和他们之间 – Sikorski

+0

@alex修改我的代码。 –

回答

4

您的代码最初有一个错误。

if(flag = false && flag1 = false && ....){ 
    userTransaction = rollback; 
} 

=(分配)比==(比较)不同。

接下来的事情是你现在的风格,你可以减少代码

if(! flag || !flag1 || ....){ 
    userTransaction = rollback; 
} 

因为他们是你不需要用布尔值再次检查布尔值。

我建议的最后一件事是,在这些变量来自哪里,维护一个列表并遍历它们来检查所有,这样,即使你有多少布尔值,你的代码检查仍然保持不变。

+1

“我想回滚时,8个布尔人中的一个或多个有错误。”所以''',而不是'&&',当然? –

+0

@AndyTurner是的。那是||。错过了。谢谢。 –

2

我认为这是处理这个问题的最快方法。

  1. 写您的标志到列表或数组

  2. 测试这样

方式列表:

if(!myList.contains(false)) //all true;

阿拉作为Ÿ

if(!myArray.asList().contains(false)) //all true;

+1

而不是维护一个数组并将其转换为列表,我建议直接拿一个列表:) –

+0

@sᴜʀᴇsʜᴀᴛᴛᴀty修正它。正如sᴜʀᴇsʜᴀᴛᴛᴀ所说,它更容易,更快地处理列表 – osanger

+0

我认为一个数组会更好。一个列表只能有盒装类型。一个数组可以有原始类型。 '列表'vs'布尔[]'。 –

2

可以在所有值与BooleanUtils阿帕奇执行and操作:

​​

或者只是做通常的方式:

if (flag1 && flag2 && flag3 && flag4)) { 
    userTransaction = commit; 
} else { 
    userTransaction = rollback; 
} 
4

怎么样以下?

if(flag && flag1 && ....){ 
    userTransaction = commit; 
    } else { 
     userTransaction = rollback; 
    } 
+0

最佳选择恕我直言。简单易读。也可以是一行指令。 – dit

1

如果你不需要中间结果,那么你可以试试这个:

boolean result = true; 
boolean doRollback = true; 
try { 
    result = db.doSomething1() && result; // ? && true -> ?; 
    result = db.doSomething2() && result; // if result: false then ? && result -> false 
    if (result) {userTransaction.commit(); doRollback = false;} 
} finally { 
    if (doRollback) userTransaction.rollback(); 
} 

这将确保每个数据库操作执行......这结果包含了最终的结果。

相关问题