2015-07-12 101 views
2
public static boolean work(String str, char ch) 

使用遞歸找出str是否至少包含一個ch。
如果是,返回true,否則返回false。
修復簡單的java遞歸代碼

工作( 「whynot」, 'N')返回true
工作( 「請」, 'Z')返回false

public static boolean work(String str, char ch){ 
    //base case 
    if (str == null || str.equals("")){ 
     return false; 
    } 

    //recursive case 
    if (ch == str.charAt(0)){ 
     return true; 
    }else { 
     work(str.substring(1), ch); 
    } 
    return false; 
} 

我的代碼將正確返回「如果ch是str的第一個字符,則返回true;如果ch在str的任何其他部分,則返回「false」的錯誤答案。

請解釋爲什麼......我在想這是因爲我的最後一次「返回錯誤」聲明否定遞歸情況下的「真實」,但是當我擺脫了最後一個「返回錯誤」時我的編譯器會抱怨我缺少返回值。

+0

包含(str.substring(1),CH);:

試試這個而不是工作? –

+0

你一直在改變你的功能名稱(應該是「工作」,但是「包含」,現在它是「工作」,但你打電話給「包含」裏面......)清理那個 – Amit

回答

2

這是因爲你沒有返回遞歸調用的結果。你爲什麼要打電話

public static boolean work(String str, char ch){ 
    //base case 
    if (str == null || str.equals("")){ 
     return false; 
    } 

    //recursive case 
    if (ch == str.charAt(0)){ 
     return true; 
    }else { 
     return work(str.substring(1), ch); 
    } 
} 
+0

非常感謝,工作。但是,我的最後一個返回false語句是否可以覆蓋上面的if語句的真實性? – CMSC

+0

現在不是代碼已修復。在返回代碼之後沒有進一步的處理(拋開設置異常處理),並且如果if語句的兩個分支都以返回結束,那就足夠了。 (P.S. - 你喜歡答案嗎?接受它!:-) – Amit

+0

是的,我會的,但該網站不會讓我,直到10分鐘過去了。非常感謝。 – CMSC