以下代码是对编码蝙蝠的问题的回应: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语句,为什么解决方案不起作用? 当然,订单无关紧要。有人可以解释为什么订单在这个实例中/在任何情况下都很重要。
答案 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));
}
在最后一种情况下,订单也很重要,因为其他测试后的测试考虑到我们到达这里时失败了。