为什么顺序对于这种递归方法很重要?
Why does the order matter for this recursion method?
以下代码是对编码 bat 的问题的回应: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 语句,为什么解决方案不起作用?
当然,顺序无关紧要。有人可以解释为什么订单在这种情况下/在任何情况下都很重要。
很可能是因为您正在将字符串与 !=
和 ==
进行比较(对于第一种情况)。这应该可以按任何顺序完成。
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);
}
但是,"smarter" 代码将是:
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));
}
在最后一种情况下,顺序也很重要,因为其他测试之后的测试会考虑到如果我们到达这里它们就会失败。
以下代码是对编码 bat 的问题的回应: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 语句,为什么解决方案不起作用? 当然,顺序无关紧要。有人可以解释为什么订单在这种情况下/在任何情况下都很重要。
很可能是因为您正在将字符串与 !=
和 ==
进行比较(对于第一种情况)。这应该可以按任何顺序完成。
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);
}
但是,"smarter" 代码将是:
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));
}
在最后一种情况下,顺序也很重要,因为其他测试之后的测试会考虑到如果我们到达这里它们就会失败。