2016-02-27 33 views
0

我必須使用遞歸來實現布爾方法。沒有任何for循環是允許的。我寫的代碼給出了正確的答案。但是,這是不正確的。有什麼好的建議嗎?謝謝!字符串計數的Java布爾遞歸方法

public class RecusiveMethod { 

    public static void main (String[] args) { 
     System.out.println("True: " + isWordCountsRight("ccowcow", "cow", 2)); 
     System.out.println("True: " + isWordCountsRight("kayakayakaakayak", "kayak", 3)); 
    } 


    public static boolean isWordCountsRight(String str, String word, int n) { 
     if (n == 0) return true; 

     if (str.substring(0, word.length()).equals(word)) { 
      return isWordCountsRight(str.substring(1), word, n - 1); 
     } 

     return isWordCountsRight(str.substring(1), word, n); 
    } 
} 
+0

什麼是預期的結果? –

+0

在第二種情況下你期望2或3嗎?匹配重疊還是不匹配? – blafasel

+0

請注意,你永遠不會返回'false' - 猜這就是你的問題 – MartinS

回答

1

你也可以做到這一點,像這樣:

public static boolean isWordCountsRight(String str, String word, int n) { 
if (n == 0) return true; 

int index = str.indexOf(word); 

if (index != -1) { 
    return isWordCountsRight(str.substring(index+1), word, n - 1); 
} else { 
    return false; 
} 
+0

這沒有重疊。第二種情況你會得到2。 – blafasel

+0

你說得對,我試圖保存潛在的冗餘步驟太貪婪。但這是一個簡單的修復,只需將word.length()替換爲1 – Maljam

+0

感謝您的所有建議! – xh2000