布尔逻辑和 For 循环

Boolean Logic and For Loops

提问人:AzureBoredom 提问时间:7/17/2023 最后编辑:RF1991AzureBoredom 更新时间:7/17/2023 访问量:47

问:

我想知道那些熟悉 codingbat 问题的人是否能够帮助我理解这两种解决方案之间的区别以及为什么其中一种不起作用。 问题: 给定一个字符串,如果字符串中“x”的第一个实例紧跟另一个“x”,则返回 true。

为什么第一个代码在计算第一个条件后立即退出,而另一个代码继续通过 for 循环?它们之间有什么区别?

我认为以下代码可以解决问题:

boolean doubleX(String str) {
  for(int i =0; i<str.length()-1; i++){
    if(str.charAt(i)=='x' && str.charAt(i+1)=='x')
    return true;
  }
  return false;
}

但是,仅当第一个 x 后跟 x 时,此代码才计算 true。但是,以下代码确实解决了该问题:

 boolean doubleX(String str) {
    for (int i = 0; i < str.length() - 1; i++) {
        if (str.charAt(i) == 'x') {
            if (str.charAt(i + 1) == 'x') {
                return true;
            } else {
                return false;
            }
        }
    }
    return false;
    }
java for-loop 逻辑布尔表达式

评论


答:

1赞 Unmitigated 7/17/2023 #1

第一个函数返回 String like ,其中第二个 x 后跟另一个 x,但第一个 x 不是。true"xaxx"

如果第一个 x 后面没有 x,它会继续检查后续字符,而不是在到达第一个 x 时停止。

评论

0赞 AzureBoredom 7/18/2023
我只是不明白为什么第二个有效,而第一个无效。第二个代码不就是使用更多的行来定义相同的操作吗?
0赞 Unmitigated 7/18/2023
@AzureBoredom 否,当第一个 x 后面没有另一个 x 时,它会显式返回。对于第一个函数,条件的计算结果为 false,循环继续运行。在循环完成之后,直到函数结束才有。falsestr.charAt(i)=='x' && str.charAt(i+1)=='x'return false
0赞 AzureBoredom 7/18/2023
哦,我明白。谢谢
0赞 Gaurav Jeswani 7/17/2023 #2

您可以按如下方式重写第一个代码:

boolean doubleX(String str) {
  for(int i =0; i<str.length()-1; i++){
      if(str.charAt(i)=='x') {
          if(str.charAt(i+1)=='x') { 
            return true;
          }
      }
  }
  return false;
}

现在您可能明白其中的区别了。仅当在 i+1 处立即收到第二次出现的“x”时,第一个代码才对第一次出现的 'x' 返回 'true'。那里没有“虚假”返回。

而第二个代码总是在第一次出现 x' 后返回为 either 或 ,无论是否在 i+1 处接收到另一个 'x'。truefalse