试图在Java中以String格式递归地将整数转换为二进制?

时间:2016-04-23 15:07:38

标签: java recursion binary

当我只想打印数字而不是将它们保存在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.我认为逻辑是相同的,这显然是错误的。有什么帮助吗?

2 个答案:

答案 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 "";
}