繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM