2017-09-13 11 views
0

私は返信文を別の場所に置くときはいつでも、異なる結果を出します。ブールの質問と異なる答え

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

異なる

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; 
} 

return文は、プロセスを終了し、方法を残します。あなたがメソッドの最後に

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

を入れた場合 fizzbuzz両方が trueをしている場合は、最初の文はすでに真となり、「フィズ」を返されるので、それは、到達することはできません。次の2つのステートメントは評価されません。

あなたが望むのは最初のバージョンです。まず両方が真であるかどうか、そしてどちらかが真であるかどうかを確認する必要があります。 2番目のケースでは、最後のステートメントは実際に到達できず、コード内で決して実行されるべきではありません。

あなたは文が交換可能になりたい場合は、次のようにそれらを変更することができます。

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

これは

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

をsnippet1このsnippet2

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

が異なってチェックしています異なる順序の条件...論理が異なるため結果は同じにはなりません

例:パラメータがFで始まるとき、あなたは「フィズ」を返し、変数話題の価値はもう気をdoenst snippet2で

....

if (fizz) 
     return "Fizz"; 

が、snippet1の両方で条件を満たす必要があります! F で始まり、B

+0

あなたの答えの最初の2/3はちょうど "ここにあなたのコード+ある改行" – Michael

0

Returnステートメントで終了することは一度しか方法ごとに実行されます。だからあなたの 'if'ステートメントが真であるときは、あなたのメソッドは特定のreturnステートメントを返し、コードを終了します。この例では、出力はstrパラメータが保持する値に依存します。フィズとバズの両方がtrueの場合は、チェックすると、最初のコードで

0

は、最初に

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

をsnipet。そしてどちらかが偽であれば、実行せずにスキップします。そして2番目と1番目のifsはfizzとbuzzを別々にチェックし、2番目の(fizz)条件が真であれば "Fizz"が返されます。それ以外の場合は、バズが真であるかどうかがチェックされます。第二のコードで が

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

をsnipet最後の条件(フィズ& &バズ)が真と方法戻ることができることがフィズまたはバズ条件前と同様、実行されることはありません。 条件(fizz & & buzz)を確認する必要がある場合は、両方とも最初のコードスニペットを使用することをお勧めします。 または、コードをリファクタリングすることができます。

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; 
} 
関連する問題