![](/img/trans.png)
[英]Why does my Validare Zip Code(boolean) program return false?
[英]Why does the default Boolean return value influence my tests outcome
我正在學習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;
}
所有結果都還可以。
但是,當我更改代碼並反轉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;
}
您能告訴我結果為何不同嗎? 在任何一本書中,我似乎都找不到確切的解釋。
用英語密切注意代碼的作用:
*
:
得到完全不同的結果的原因是因為您完全翻轉了程序的邏輯 。 這是您的代碼,再次使用英語:
*
:
您沒有將false
為默認的返回選項。 您已經顛倒了整個程序的邏輯。 考慮空字符串,這是一個有效的測試用例。 您的代碼說,當字符串中沒有星號時,這是無效的(這將是一個奇怪的誤報)。
第一種情況有效,因為只有在*
前后帶有相同字符或者string
根本不包含*
情況下,它才返回true。
在第二種情況不起作用,因為它返回true,如果它包含至少具有一個*
和一審*
的前面和后面相同的字符,無論下一個實例*
。 因此,如果傳遞了空白字符串,則應返回true,但返回false,因為它不包含*
。 如果傳遞了另一個字符串*xa*a*b
則第二個程序將返回true,因為*
的實例遵循約定。 第二個程序將立即返回true,並在其首次出現后忽略所有*
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.