Java 布尔问题的不同答案
每当我把我的回报陈述放在不同的地方,它会产生不同的结果,有人能解释为什么吗Java 布尔问题的不同答案,java,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.ch
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;
}
return语句将终止进程并保留方法。如果你把
if (fizz && buzz) return "FizzBuzz";
在方法的末尾,它永远无法到达,因为如果fizz
和buzz
都是true
,那么第一条语句将已经是true,并且将返回“fizz”。下面两个语句甚至不会被计算
您需要的是第一个版本-您应该首先检查两个版本是否都为真,然后检查是否只有一个版本为真。在第二种情况下,最后一个statment实际上是不可访问的,并且不应该在代码中出现
如果希望语句可交换,可以将其更改为以下内容:
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";
这段代码是2
if (fizz)
return "Fizz";
if (buzz)
return "Buzz";
if (fizz && buzz)
return "FizzBuzz";
正在按不同的顺序检查不同的条件。。。由于逻辑不同,结果不可能相同
例如:
在代码段2中,当参数以f开头时,返回“Fizz”,变量buzz的值不再重要
if (fizz)
return "Fizz";
但在代码段1中,这两个条件都必须满足!以f开始,以b结束。每个方法只执行一次Return语句。因此,只要您的“if”语句为true,您的方法就会返回特定的return语句并退出代码。在本例中,输出取决于str参数保持的值 在第一个代码snipet中
if (fizz && buzz) return "FizzBuzz";
if (fizz) return "Fizz";
if (buzz) return "Buzz";
if (fizz) return "Fizz";
if (buzz) return "Buzz";
if (fizz && buzz) return "FizzBuzz";
如果您检查fizz和buzz是否都为真,则使用first。如果其中一个为false,则不会执行并跳过该if。然后,第二个和第一个ifs分别检查嘶嘶声和嗡嗡声,如果第二个(嘶嘶声)条件为真,则返回“嘶嘶声”。否则,将检查buzz为真时的条件。
在第二个代码snipet中
if (fizz && buzz) return "FizzBuzz";
if (fizz) return "Fizz";
if (buzz) return "Buzz";
if (fizz) return "Fizz";
if (buzz) return "Buzz";
if (fizz && buzz) return "FizzBuzz";
最后一个条件(fizz&&buzz)将永远不会执行,因为在它之前,fizz或buzz条件可能为true,并且方法返回。
如果您需要检查条件(嘶嘶声和嗡嗡声),最好使用第一个代码段。
或者您可以重构代码,例如:
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;
}
str参数是什么?你回答的前2/3是“这是你的代码+一些换行符”