Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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_Boolean - Fatal编程技术网

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

Java 为什么默认的布尔返回值会影响我的测试结果,java,boolean,Java,Boolean,我正在学习Java,在完成练习时,我偶然发现了CodingBatssameStarChar程序中的一个问题 我知道这是一个简单的练习,但不同结果背后的逻辑确实让我感到困扰 当我写作时: public boolean sameStarChar(String str) { for (int i = 1; i < str.length() - 1; i++) { if (str.charAt(i) == '*') { if (str.charAt

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

我知道这是一个简单的练习,但不同结果背后的逻辑确实让我感到困扰

当我写作时:

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;
}

你能告诉我为什么结果不同吗?我似乎在任何一本书中都找不到对此的确切解释。

请密切关注代码在做什么,用英语:

  • 在字符串的所有字符之间循环,从1开始,直到其结束前的1
    • 如果给定位置i处的字符为
      *
      • 如果前后位置的字符相等:
        • 返回false
  • 返回true。假设另一个场景已经穷尽了它的理由
你得到完全不同结果的原因是你完全颠倒了程序的逻辑。这是您的代码,还是英文版:

  • 在字符串的所有字符之间循环,从1开始,直到其结束前的1
    • 如果给定位置i处的字符为
      *
      • 如果前后位置的字符不相等:
        • 返回true
  • 返回false。假设另一个场景已经穷尽了它的理由

您没有将
false
设置为默认返回选项您已经反转了整个程序的逻辑。< /强>考虑空字符串,这是一个有效的测试用例。当字符串中没有星号时,您的代码说这是无效的(这将是一个奇怪的假阳性)。

请密切注意代码在做什么,英语:

  • 在字符串的所有字符之间循环,从1开始,直到其结束前的1
    • 如果给定位置i处的字符为
      *
      • 如果前后位置的字符相等:
        • 返回false
  • 返回true。假设另一个场景已经穷尽了它的理由
你得到完全不同结果的原因是你完全颠倒了程序的逻辑。这是您的代码,还是英文版:

  • 在字符串的所有字符之间循环,从1开始,直到其结束前的1
    • 如果给定位置i处的字符为
      *
      • 如果前后位置的字符不相等:
        • 返回true
  • 返回false。假设另一个场景已经穷尽了它的理由

您没有将
false
设置为默认返回选项您已经反转了整个程序的逻辑。< /强>考虑空字符串,这是一个有效的测试用例。当字符串中没有星号(这将是一个奇怪的假阳性)时,您的代码说这是无效的。

第一种情况有效,因为只有当
*
前面和后面有相同的字符,或者
字符串
根本不包含
*
时,它才会返回true


第二种情况不起作用,因为如果它至少包含一个
*
,则返回true,
*
的第一个实例前面和后面都是相同的字符,而不管
*
的下一个实例是什么。因此,如果传递一个空白字符串,它应该返回true,但它会返回false,因为它不包含
*
。如果传递了另一个字符串
*xa*a*b
,则第二个程序将返回true,因为
*
的实例遵循约定。第二个程序将立即返回true,忽略第一次出现后的所有
*

第一个大小写有效,因为只有当
*
前面和后面有相同的字符,或者
字符串
根本不包含
*
时,它才会返回true


第二种情况不起作用,因为如果它至少包含一个
*
,则返回true,
*
的第一个实例前面和后面都是相同的字符,而不管
*
的下一个实例是什么。因此,如果传递一个空白字符串,它应该返回true,但它会返回false,因为它不包含
*
。如果传递了另一个字符串
*xa*a*b
,则第二个程序将返回true,因为
*
的实例遵循约定。第二个程序将立即返回true,忽略第一次出现后的所有
*

您想知道,如果返回值正好相反,为什么会得到不同的结果?这取决于您正在测试的内容。什么测试失败?这不是一个真正的Java问题,而是基本的布尔逻辑。您想知道,如果返回值正好相反,为什么会得到不同的结果?这取决于您正在测试的内容。什么测试失败?这不是一个真正的Java问题,而是基本的布尔逻辑。第二个程序仍然循环所有
*
,因此相同字符的任何实例都将返回
true
。第二个程序仍然循环所有
*
,因此相同字符的任何实例都将返回
true
。您写道:在这两种情况下,“如果前面的一个位置和后面的一个位置的字符相等”,但是它是!=results false VS==results true。@Gery:很好。我将修改这个答案。您写道:“如果前面的一个位置和后面的一个位置的字符相等。”“在这两种情况下,都是这样!”结果为假VS==结果为真。@Gery:捕捉得好。我将修改这个答案。
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;
}