簡體   English   中英

為什么默認的布爾值會影響我的測試結果

[英]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;
}

您能告訴我結果為何不同嗎? 在任何一本書中,我似乎都找不到確切的解釋。

用英語密切注意代碼的作用:

  • 循環遍歷字符串的所有字符,從1開始直到結束前一直到1
    • 如果給定位置i上的字符是*
      • 如果字符的前面和后面的位置相等:
        • 返回false。
  • 返回true。 假設其他情況已經用盡。

得到完全不同的結果的原因是因為您完全翻轉了程序的邏輯 這是您的代碼,再次使用英語:

  • 循環遍歷字符串的所有字符,從1開始直到結束前一直到1
    • 如果給定位置i上的字符是*
      • 如果字符的前面和后面的位置不相等:
        • 返回true。
  • 返回false。 假設其他情況已經用盡。

您沒有將false為默認的返回選項。 您已經顛倒了整個程序的邏輯。 考慮空字符串,這是一個有效的測試用例。 您的代碼說,當字符串中沒有星號時,這是無效的(這將是一個奇怪的誤報)。

第一種情況有效,因為只有在*前后帶有相同字符或者string根本不包含*情況下,它才返回true。

在第二種情況不起作用,因為它返回true,如果它包含至少具有一個*和一審*的前面和后面相同的字符,無論下一個實例* 因此,如果傳遞了空白字符串,則應返回true,但返回false,因為它不包含* 如果傳遞了另一個字符串*xa*a*b則第二個程序將返回true,因為*的實例遵循約定。 第二個程序將立即返回true,並在其首次出現后忽略所有*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM