2015-01-26 92 views
-1

下面的代碼是在回答關於編碼蝙蝠一個問題:http://codingbat.com/prob/p101372爲什麼這個遞歸方法的順序很重要?

此解決方案...

public String changeXY(String str) { 

if (str=="") {return "";} 
else if (str.substring(0,1).equals("x") && str.length()<2) { return "y";} 
else if (str.substring(0,1)!="x" && str.length()<2) {return str;} 
else if (str.substring(0,1).equals("x") && str.length()>1) {return "y" + changeXY(str.substring(1));} 
else if (str.substring(0,1)!=("x")) { return str.substring(0,1) + changeXY(str.substring(1));} 


return changeXY(str); 

} 

但是,爲什麼沒有解決,如果我只是重新排列if語句工作? 當然,順序無關緊要。有人可以解釋爲什麼在這種情況下訂單很重要/無論如何。

+2

因爲您的條件並不相互排斥。考慮'if(x == 1 && y == 2){print(「Foo」); } else if(x == 1){print(「Bar」); }'。 – 2015-01-26 22:15:43

+1

很可能是因爲你正在用'!='比較字符串。此外,你的測試是多餘的 – Dici 2015-01-26 22:18:22

+0

如果不是'!='我會畫一張[卡諾圖(http://arn.wikipedia.org/wiki/Karnaugh_map)。 – Sylwester 2015-01-27 01:09:15

回答

0

很可能是因爲您正在比較字符串!===(對於第一種情況)。這應該以任何順序進行。

public String changeXY(String str) { 
    if (str.isEmpty()) return ""; 
    else if (str.substring(0,1).equals("x") && str.length()<2) return "y"; 
    else if (!str.substring(0,1).equals("x") && str.length()<2) return str; 
    else if (str.substring(0,1).equals("x") && str.length()>1) return "y" + changeXY(str.substring(1)); 
    else if (!str.substring(0,1).equals("x")) return str.substring(0,1) + changeXY(str.substring(1)); 

    return changeXY(str); 
} 

然而,「聰明」的代碼是:

public String changeXY(String str) { 
    if (str.isEmpty() || (str.charAt(0) != 'x' && str.length() < 2)) return str; 
    else if (str.charAt(0) == 'x') return "y" + changeXY(str.substring(1)); 
    return str.charAt(0) + changeXY(str.substring(1)); 
} 

在最後一種情況下,順序也很重要,因爲下面的其他測試的測試考慮到,他們失敗了,如果我們來到這裏。

+0

非常感謝你:) – 2015-01-29 14:46:59

相關問題