返回信息流先贴错误代码:
public class test {
public static void main(String[] args) {
System.out.println((generateChar('8', 65, 122)));
}
private static char generateChar(char aChar, int low, int high) {
char c = 'A';
int a = aChar + 3;
if (a >= low && a <= high) {
c = (char) a;
return c;
} else if (a < low) {
generateChar((char) (a + 6), low, high);
} else if (a > high) {
generateChar((char) (a - 30), low, high);
}
return c;
}
}
然后是正确的代码:
public class test {
public static void main(String[] args) {
System.out.println((generateChar('8', 65, 122)));
}
private static char generateChar(char aChar, int low, int high) {
char c = 'A';
int a = aChar + 3;
if (a >= low && a <= high) {
c = (char) a;
return c;
} else if (a < low) {
return generateChar((char) (a + 6), low, high);
} else if (a > high) {
return generateChar((char) (a - 30), low, high);
}
return c;
}
}
错误的代码最终的输出都是字符'A',正确的代码能够根据条件输出相应的字符.现在的问题是,我知道错误的原因是递归前面没有加返回是无法得到结果的,想求的解释是为啥错误的代码返回的是’A'[ema11]
这是一条镜像帖。来源:北邮人论坛 / java / #47970同步于 2016/2/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求个详细解释。。。
wht
2016/2/22镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
好绕啊,最讨厌递归惹喵
因为错误代码无论进不进递归,最后返回的都是最外层的return c;也就是'A'。
再说清楚一点,假设某用例能够进一层递归,进去之后返回出来的结果并不会返回到最外层出去,也不会让程序停止(generateChar并不给谁赋值,也不return,相当于没用),因此还是会执行最外面的return c,也就是‘A’。
------
唉
顶多会因为c = (char) a;改变一下,不过也是只有最外层的return c;生效
大概就是这样吧
喵~谢谢你的解释,我大概懂了。(*^ω^*)
【 在 ytinrete 的大作中提到: 】
: 好绕啊,最讨厌递归惹喵
: 因为错误代码无论进不进递归,最后返回的都是最外层的return c;也就是'A'。
: 再说清楚一点,假设某用例能够进一层递归,进去之后返回出来的结果并不会返回到最外层出去,也不会让程序停止(generateChar并不给谁赋值,也不return,相当于没用),因此还是会执行最外面的return c,也就是‘A’。
: ...................
Scala大法好,根本不用写return。
package cn.byr.nuanyangyang.genchar
import scala.annotation.tailrec
object GenChar {
@tailrec
def generateChar(aChar: Char, low: Int, high: Int): Char = {
val a = aChar + 3
if (low <= a && a <= high) {
a.toChar
} else if (a < low) {
generateChar((a + 6).toChar, low, high)
} else {
generateChar((a - 30).toChar, low, high)
}
}
def main(args: Array[String]): Unit = {
println(generateChar('8', 65, 122))
}
}
Ruby大法也好,也不用写return。
def generate_char(ch, low, high)
a = ch.ord + 3
if low <= a and a <= high then
a.chr
elsif a < low then
generate_char((a+6).chr, low, high)
else
generate_char((a-30).chr, low, high)
end
end
puts generate_char('8', 65, 122)
(●—●)
膜拜了……除了java基本没写过其他语言……
【 在 nuanyangyang 的大作中提到: 】
: Ruby大法也好,也不用写return。
: [code=ruby]
: def generate_char(ch, low, high)
: ...................