2016-12-12 24 views
1
boolean riddle = !(1 < 8 || (5 > 2 && 3 < 5)); 

布爾值是true或false。由此語法困惑的Java

! =不是

|| =或

& & =和

但我還是不明白這個語法...有人可以解釋我這句法excactly呢?

+0

你不瞭解什麼它?它完全按照你寫的。你在問這個具體的行嗎? – ItamarG3

+0

是的具體行是什麼? – Augurkturk

回答

4

只是對它進行解剖:

有一些比較如

5 > 2 ... true 

3 < 5 ... true 

這兩個使用& &拉在一起;所以真正的& &真實 - >真

1 < 8 ... true 

,一個是或運算的休息;所以我們得到真正的或真實的 - >真

最後,(真) - >假

長話短說:如果你不明白的全貌,把它分解成零部件你明白;然後再把它們拉到一起。

編輯:當然,我在我的解釋中使用的順序並不是現實中發生的事情。在那裏,首先評估1 < 8;這是事實;和「真或X」總是如此,其他比較甚至不計算。

+0

tnx這更清晰! – Augurkturk

+0

您從兩個根本不評估的表達式開始。 –

1

!運算符否定它在前面的內容。在這種情況下!()它將產生與括號內部相反的內容。

||或者操作員檢查一個條件或其他條件是否爲真。至少有一個條件返回true是正確的。

最後,&&檢查條件語句的兩邊,看它們是否都是真的,並且它們都必須爲真才能繼續。

1
boolean riddle = !(1 < 8 || (5 > 2 && 3 < 5)); 

讓我們來分析它的Java的方式做:

  • boolean:又來了一個布爾值,即truefalse
  • riddle:變量riddle被聲明爲boolean
  • =:使用右邊的表達式初始化布爾變量riddle
  • !(...):它返回一個布爾值,括號內布爾值的否定(=相反)。
    • 括號內是bool1 || bool2表達式,其中||"lazy OR"運算符。如果bool1爲真,則無需評估bool2
    • bool11 < 8,這是真的。
    • bool2不計算
    • bool1 ||bool2是真的
  • !(...)是假
  • riddlefalse

初始化在某個時間點沒有被5 > 23 < 5評估。 Eclipse警告說,這兩個表達式是「死代碼」,可以刪除。

整個表達式可能是:

boolean riddle = !(1 < 8 || (5 > 2 && doSomethingVeryDangerous())); 

其結果將是相同的,沒有方法的調用會發生在所有。

0

您遇到的問題是您在檢查它是否爲truefalse的同時初始化。您無法將布爾值與整數進行比較。如果你想這樣做,那麼你需要以另一種方式解決它,通過從一種數據類型轉換到另一種數據類型,或者在解決方案中涉及另一個變量。您需要爲您解決語法問題的方式是把它像這樣:

你怎麼做的......

boolean riddle = !(1 < 8 || (5 > 2 && 3 < 5)); 

如何解決潛在的吧...

boolean riddle; 

"...some code to decide if riddle will be true or 
false and assign it to the variable riddle..." 

if (riddle == true){ 
"...do some code here..."; 
} 

if (riddle == false){ 
"...do some code here..."; 
} 

或者你可以通過不使用布爾值作爲數據類型來解決問題,而只能使用像這樣的整數...

int riddle; 

"...some code to decide what value riddle will 
have and assign it to the variable riddle..." 

if (riddle < 8 && riddle > 1){ 
    "...do some code here..."; 
}