2017-09-13 80 views
0

每當我把我的迴歸聲明放在不同的地方,它會產生不同的結果,任何人都可以解釋爲什麼?布爾問題的不同答案

str只要返回正確的結果就會保持任何給定的值。

fizzString("fooo") → "Fizz" 
fizzString("b") → "Buzz" 
fizzString("fb") → "FizzBuzz" 

public String fizzString(String str) { 
    boolean fizz = str.charAt(0) == 'f'; 
    boolean buzz = str.charAt(str.length() - 1) == 'b'; 

    if (fizz && buzz) return "FizzBuzz"; 
    if (fizz) return "Fizz"; 
    if (buzz) return "Buzz"; 

    return str; 
} 

不同

public String fizzString(String str) { 
    boolean fizz = str.charAt(0) == 'f'; 
    boolean buzz = str.charAt(str.length() - 1) == 'b'; 


    if (fizz) return "Fizz"; 
    if (buzz) return "Buzz"; 
    if (fizz && buzz) return "FizzBuzz"; 

    return str; 
} 
+0

什麼是str參數保存? –

回答

2

return語句會終止該進程,並保留方法。如果你把

if (fizz && buzz) return "FizzBuzz"; 

在方法的結束,它永遠不能達到的,因爲如果兩個fizzbuzztrue,第一條語句將已經真正和「嘶嘶聲」將被退回。以下兩個聲明甚至不會被評估。

你想要的是第一個版本 - 你應該首先檢查兩者是否屬實,然後是否只有一個屬實。在第二種情況下,最後的聲明實際上是無法訪問的,並且這絕不應該發生在您的代碼中。

如果你想在語句是可以互換的,可以將其更改爲以下:

if (fizz && buzz) return "FizzBuzz"; 
if (fizz && !buzz) return "Fizz"; 
if (!fizz && buzz) return "Buzz"; 
-1

這snippet1

if (fizz && buzz) 
    return "FizzBuzz"; 
if (fizz) 
    return "Fizz"; 
if (buzz) 
    return "Buzz"; 

這snippet2

if (fizz) 
    return "Fizz"; 
if (buzz) 
    return "Buzz"; 
if (fizz && buzz) 
    return "FizzBuzz"; 

正在檢查不同條件以不同的順序...結果不可能是相同的,因爲邏輯不同

例如:

在返回「菲斯」的參數開始使用f對snippet2,變量嗡嗡聲的價值doenst照顧了....

if (fizz) 
     return "Fizz"; 

但snippet1兩必須滿足條件!開始˚F,並結束與b

+0

答案的第一個2/3就是「這裏是你的代碼+一些換行符」 – Michael

0

Return語句將每個方法只執行一次。所以,只要您的'if'語句爲true,您的方法就會返回特定的return語句並退出代碼。在這個例子中,輸出取決於str參數所保持的值。

0

在第一一小段代碼片段

if (fizz && buzz) return "FizzBuzz"; 
if (fizz) return "Fizz"; 
if (buzz) return "Buzz"; 

與第一,如果你檢查,如果兩者的香味和嗡嗡聲是如此。如果它們中的任何一個都是假的,如果不執行並跳過。然後第二個和第一個ifs分別檢查嘶嘶聲和嗡嗡聲,如果第二個(嘶嘶聲)條件爲真,則將返回「Fizz」。否則,會檢查蜂鳴聲是否爲真。 在第二一小段代碼片段

if (fizz) return "Fizz"; 
if (buzz) return "Buzz"; 
if (fizz && buzz) return "FizzBuzz"; 

最後一個條件(嘶嘶聲& &嗡嗡聲)將永遠不會被執行,如之前它存在的香味或嗡嗡聲的條件可以是真實和方法返回。 如果您需要檢查條件(嘶嘶聲& &嗡嗡聲)兩個真的更好使用第一個代碼段。 或者你可以重構代碼,例如:

public String fizzString(String str) { 
    boolean fizz = str.charAt(0) == 'f'; 
    boolean buzz = str.charAt(str.length() - 1) == 'b'; 

    String res = str; 
    if (fizz && buzz) res = "FizzBuzz"; 
    if (fizz) res = "Fizz"; 
    if (buzz) res = "Buzz"; 

    return str; 
}