布尔问题的不同答案

时间:2017-09-13 12:18:56

标签: java

每当我将回报陈述放在不同的地方时,它会产生不同的结果,有人可以解释原因吗?

只要它返回正确的结果,

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

4 个答案:

答案 0 :(得分:2)

return语句将终止进程并离开方法。如果你把

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

在方法结束时,永远无法触及,因为如果fizzbuzz都是true,则第一个语句已经为真且" Fizz& #34;将被退回。以下两个陈述甚至不会被评估。

你想要的是第一个版本 - 首先要检查两者是否都是真的,然后才能确定是否只有一个版本。在第二种情况下,最后一个语句实际上是无法访问的,并且在代码中永远不会发生。

如果您希望语句可以互换,可以将它们更改为以下内容:

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

答案 1 :(得分:0)

每个方法只会执行一次返回语句。因此,只要您的'if'语句为true,您的方法就会返回特定的return语句并退出代码。在此示例中,输出取决于str参数保存的值。

答案 2 :(得分:0)

在第一个代码snipet

if (fizz && buzz) return "FizzBuzz";
 if (fizz) return "Fizz";
 if (buzz) return "Buzz";
首先,如果你检查fizz和buzz是否都是真的话。如果它们中的任何一个是假的,那么如果不执行并跳过它。然后第二个和第一个ifs分别检查fizz和buzz,如果第二个(fizz)条件是真的" Fizz"将被退回。否则将检查buzz为true的条件。 在第二个代码snipet

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

最后一个条件(fizz&& buzz)将永远不会被执行,因为之前有fizz或buzz条件可以是true并且方法返回。 如果您需要检查条件(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;
}

答案 3 :(得分:-1)

此片段1

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

和此片段2

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

以不同的顺序检查不同的条件......由于逻辑不同,结果不能相同

示例:

在snippet2中,您返回" Fizz"当参数以f开头,并且变量buzz的值值得关注....

    if (fizz)
        return "Fizz";

但在snippet1中必须满足两个条件!以 f 开头,以 b 结束