每当我将回报陈述放在不同的地方时,它会产生不同的结果,有人可以解释原因吗?
只要它返回正确的结果, 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 :(得分:2)
return语句将终止进程并离开方法。如果你把
if (fizz && buzz) return "FizzBuzz";
在方法结束时,永远无法触及,因为如果fizz
和buzz
都是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 结束