当我只想打印数字而不是将它们保存在String变量中时,以下代码有效:
public static void toBinary(int num) {
if (num>0) {
toBinary(num/2);
System.out.print(num%2 + " ");
}
}
但是,我要做的是将每个二进制数字附加到String的末尾。我必须这样做的方法是:
public static String toBinary(int num){
String binary = "";
if(num > 0){
toBinary(num/2);
binary += (num%2);
}
return binary;
}
无论传入此方法的数字是多少,字符串最终都是单个1或0.我认为逻辑是相同的,这显然是错误的。有什么帮助吗?
答案 0 :(得分:1)
将toBinary()
方法的返回值分配给binary
变量:
if(num > 0){
binary = toBinary(num/2);
binary += (num%2);
}
注意:在Java中生成二进制字符串非常容易 例如
System.out.println(Integer.toBinaryString(23));
输出:
10111
答案 1 :(得分:0)
您尝试递归的问题在于您在每个级别初始化binary
变量,因此您无法获得递归的完整结果。你只会得到最后一位数。它将在最后传递回递送链。
原始方法的递归等价物如下所示:
public static String toBinary(int num) {
if (num>0)
return toBinary(num / 2) + (num % 2);
else
return "";
}
请注意,这个和原来的二进制转换器都不是很好,因为它们没有正确处理0。他们也没有处理负数。
我们可以修复0,并优雅地处理负数,如下所示:
public static String toBinary(int num) {
if (num < 0)
throw new IllegalArgumentException("Negative numbers not supported");
else if (num == 0)
return "0";
else return toBinaryInternal(num);
}
private static String toBinaryInternal(int num) {
if (num>0)
return toBinaryInternal(num / 2) + (num % 2);
else
return "";
}