为什么这个递归方法的顺序很重要?

时间:2015-01-26 22:14:06

标签: java if-statement recursion

以下代码是对编码蝙蝠的问题的回应: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语句,为什么解决方案不起作用? 当然,订单无关紧要。有人可以解释为什么订单在这个实例中/在任何情况下都很重要。

1 个答案:

答案 0 :(得分: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));
}

在最后一种情况下,订单也很重要,因为其他测试后的测试考虑到我们到达这里时失败了。