2014-10-11 54 views
-1

當使用遞歸時,我意識到我不知道return語句是如何工作的。當target.contains(key)返回true時,它會停止並返回true,還是會因爲下面的行而退出並返回false?方法的先前迭代是否完成,以便返回false?返回語句如何在遞歸中工作?

該程序創建密碼,並調用此方法來檢查密碼是否包含必需字段之一,如大寫字母,符號或數字。它被稱爲4個獨立的資源,然後用它們告訴程序保存密碼或創建一個新密碼,如果它不符合要求的標準。我已經完成了這個程序以獲得更多有趣的內容來刷新我對Java的記憶,這不是任何人都可以使用的真正的程序。

private static boolean containsKeyword(String target, String source, int placement){ 
    String key = String.valueOf(source.charAt(placement)); 
    if(target.contains(key)) 
     return true; 

    if(placement==0) 
     return false; 
    containsKeyword(target, source, placement-1); 
    return false; 
} 
+0

它的工作原理與非遞歸場景中的完全相同。 – 2014-10-11 19:01:32

+0

可能的重複[如何比較Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – azurefrog 2014-10-11 19:03:23

+0

'a'和'b'是字符串,並且您正在使用比較運算符。 – 2014-10-11 19:05:27

回答

6

你似乎缺少遞歸步驟整點。

更改此:

someFunc(a, b, nbr-1); 
return false; 

要這樣:

return someFunc(a, b, nbr-1); 

順便說一句,遞歸調用具有完全相同的數據這一功能(字符串ab)是沒有意義的。

必須有其他的東西,你想調用這個函數(也許子字符串ab)。

+0

@Alvar:好吧,我只能回答你發佈的內容... – 2014-10-11 19:09:20

+0

@Alvar:好的,那麼我的答案的第一部分就解釋了這個問題......不客氣:) – 2014-10-11 19:10:33

+1

@Alvar:順便說一句,如果你保留改變你的問題,這個答案可能會變得無關緊要... – 2014-10-11 19:11:40

1

如果沒有進入第一個if,您的方法將始終返回false。你需要改變這樣的:也許,如果你更新正是你正在嘗試做你的問題

someFunc(a, b, nbr-1); 
return false; 

return someFunc(a, b, nbr-1); 

,你會得到一個更針對性的答案,這將有助於你理解遞歸更好。

+0

它會一直進入第二,如果它完成後,這是第二個ig點,馬諾斯解決它更快..但謝謝。 – Alvar 2014-10-11 19:16:00