2015-01-26 85 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