[英]Trying to recursively convert an integer to binary in String format in Java?
当我只想打印数字而不是将它们保存在String变量中时,以下代码有效:
public static void toBinary(int num) {
if (num>0) {
toBinary(num/2);
System.out.print(num%2 + " ");
}
}
但是,我想做的是将每个二进制数字附加到字符串的末尾。 我要做的方法是:
public static String toBinary(int num){
String binary = "";
if(num > 0){
toBinary(num/2);
binary += (num%2);
}
return binary;
}
不管为此方法传入多少数字,String最终都是单个1或0。我认为逻辑将是相同的,这显然是错误的。 有什么帮助吗?
将toBinary()
方法的返回值分配给binary
变量:
if(num > 0){
binary = toBinary(num/2);
binary += (num%2);
}
注意:在Java中,二进制字符串的生成非常容易,例如
System.out.println(Integer.toBinaryString(23));
输出:
10111
尝试递归的问题在于,您正在每个级别初始化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 "";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.