2017-02-10 117 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(); 
} 

這將確保每個數據庫操作執行......這結果包含了最終的結果。