Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 布尔问题的不同答案_Java - Fatal编程技术网

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是“这是你的代码+一些换行符”