Java 为什么默认的布尔返回值会影响我的测试结果
我正在学习Java,在完成练习时,我偶然发现了CodingBatssameStarChar程序中的一个问题 我知道这是一个简单的练习,但不同结果背后的逻辑确实让我感到困扰 当我写作时: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
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
- 如果前后位置的字符相等:
- 如果给定位置i处的字符为
- 返回true。假设另一个场景已经穷尽了它的理由
- 在字符串的所有字符之间循环,从1开始,直到其结束前的1
- 如果给定位置i处的字符为
:*
- 如果前后位置的字符不相等:
- 返回true
- 如果前后位置的字符不相等:
- 如果给定位置i处的字符为
- 返回false。假设另一个场景已经穷尽了它的理由
您没有将
false
设置为默认返回选项- 在字符串的所有字符之间循环,从1开始,直到其结束前的1
- 如果给定位置i处的字符为
:*
- 如果前后位置的字符相等:
- 返回false
- 如果前后位置的字符相等:
- 如果给定位置i处的字符为
- 返回true。假设另一个场景已经穷尽了它的理由
- 在字符串的所有字符之间循环,从1开始,直到其结束前的1
- 如果给定位置i处的字符为
:*
- 如果前后位置的字符不相等:
- 返回true
- 如果前后位置的字符不相等:
- 如果给定位置i处的字符为
- 返回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;
}