为什么默认的布尔返回值会影响我的测试结果

Ger*_*ery 0 java boolean

我正在学习Java,在完成练习时,我偶然发现了CodingBats sameStarChar程序中的一个问题.

我知道这是一个简单的练习,但不同结果背后的逻辑真的让我烦恼.

我写的时候:

public boolean sameStarChar(String str) {

    for (int i = 1; i < str.length() - 1; i++) {
        if (str.charAt(i) == '*') {
            if (str.charAt(i - 1) != str.charAt(i + 1))
                return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

所有结果都没问题.

但是当我更改代码并反转if块中的条件并返回false默认返回值时,代码不再起作用并且某些测试失败:

public boolean sameStarChar(String str) {

    for (int i = 1; i < str.length() - 1; i++) {
        if (str.charAt(i) == '*') {
            if (str.charAt(i - 1) == str.charAt(i + 1))
                return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

你能否告诉我为什么结果会有所不同?我似乎无法在任何一本书中找到这方面的确切解释.

Mak*_*oto 6

用英语密切关注代码的作用:

  • 循环遍历字符串的所有字符,从1开始,在结束前一直到1
    • 如果给定位置i的角色是*:
      • 如果之前的位置和之后的位置相等:
        • 返回false.
  • 回归真实.假设其他情况已经耗尽.

你得到完全不同结果的原因是因为你完全颠倒了程序的逻辑.这是你的代码,再用英文:

  • 循环遍历字符串的所有字符,从1开始,在结束前一直到1
    • 如果给定位置i的角色是*:
      • 如果前面的位置和之后的位置不相等:
        • 回归真实.
  • 返回false.假设其他情况已经耗尽.

您尚未false设置默认返回选项; 你已经颠倒了整个程序的逻辑. 考虑空字符串,这是一个有效的测试用例.你的代码说这是无效的,当字符串中没有星号时(这将是一个奇怪的误报).