2015-05-11 93 views
3

我有一個布爾方法在我的Java程序,我想知道爲什麼NetBeans被推薦做這個改變我的代碼:Java的布爾方法的返回

return isPrime != 0; 

我寫的是什麼:

if (isPrime == 0) { 
      return false; 

     } 
     else{ 
      return true; 
     } 

兩者都能正常工作,但我無法理解NetBeans建議的更改背後的邏輯。無論是真假還是假還沒有被退回。有人能向我解釋這背後的邏輯嗎?謝謝

+0

並坦率地說:這沒什麼錯。它描述了你想要表達的內容。但是,想象一下10個條件,例如連續的條件,比你有70行代碼而不是1條。只要你正在測試的條件是簡單的比較,你應該留下簡短的符號。你會習慣像上面的例子一樣快地閱讀它們,甚至在一段時間後讀得更快。 – Peter

回答

2

而不是

if (isPrime == 0) { 
    return false; 
} else { 
    return true; 
} 

嘗試

return (isPrime != 0); 

這是同樣的事情,我會告訴你的重構路徑。與

if (isPrime == 0) { 
    return false; 
} else { 
    return true; 
} 

開始相同

if (isPrime != 0) { 
    return true; 
} else { 
    return false; 
} 

其可以通過取代來減少,代 'isPrime!= 0' 與函數 'doIsPrime()'

private boolean doIsPrime() { 
    return isPrime != 0; 
} 

代在

if (doIsPrime()) { 
    // guaranteed to be the same as above! 
    return doIsPrime(); 
} else { 
    return doIsPrime(); 
} 

wh ICH可以具有兩個塊還原(如複製的代碼)

if (doIsPrime()) { 
} 
return doIsPrime(); 

並且通過圍繞空塊除去if語句進一步減小

return doIsPrime(); 

現在撤消替代「doIsPrime()」返回「isPrime != 0'

return isPrime != 0; 

有沒有必要真的做替代;但是,我發現它更好地展示瞭如果陳述是多餘的推理。

+0

哈哈,美麗的解釋。喜歡它! – Peter

4

NetBeans完全正確。表達式布爾值。您可以通過進行更改和嘗試來輕鬆證明這一點。

0 != 0評估什麼值? (提示:這是false)。那麼1 != 0? (提示:這是true)。

這不是你的更詳細的代碼說的嗎?

+0

難道不是它返回一個布爾值? – xehpuk

+0

這些是布爾表達式。你在問什麼? – duffymo

+0

感謝duffymo我現在已經習慣了Java,並試圖理解編碼中捷徑的邏輯。 – Infinity

1

無論是真還是假都沒有返回。

假。正在退還比較isPrime != 0boolean的結果,或者是truefalse

有人可以向我解釋這背後的邏輯嗎?

第一個代碼相當於第二個代碼。如果isPrime0,則返回false,否則返回true。如果isPrime0true(如果它不是0),則!=運營商將產生false

1

這意味着它的返回predicat結果isPrime != 0 如果isPrime = 0,則predicat是假的,因此它返回false 如果isPrime!= 0,則predicat是真實的,因此返回true

0

這只是爲了減少代碼。

表達式isPrime != 0返回一個布爾值。如果isPrime == 0爲假,並且如果isPrime != 0爲真,則爲false。因此,您可以保存if語句和一些代碼行。

0

只需添加到什麼是已經說過:

雖然你的解決方案和NetBeans推薦的做法是完全正確的,另外一個辦法也將是:

if (isPrime == 0) { 
    return false; 
} 

return true; 

我不知道是什麼的NetBeans會建議採用這種方法,但我想它會提出與上述相同的建議。