我正在学习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)
你能否告诉我为什么结果会有所不同?我似乎无法在任何一本书中找到这方面的确切解释.
用英语密切关注代码的作用:
*:
你得到完全不同结果的原因是因为你完全颠倒了程序的逻辑.这是你的代码,再用英文:
*:
您尚未false设置默认返回选项; 你已经颠倒了整个程序的逻辑. 考虑空字符串,这是一个有效的测试用例.你的代码说这是无效的,当字符串中没有星号时(这将是一个奇怪的误报).
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |