使用递归将int转换为十六进制字符串

问题描述:

我正在做一个赋值,我必须使用递归将整数转换为十六进制字符串。我必须使用返回字符串值的方法来执行此操作。我试图把我使用的纸张为代码的方法和它工作得很好:使用递归将int转换为十六进制字符串

public class ItH { 
private static String intToHex(int n) { 
    int temp = n % 16; 
    String digit = ""; 

    if (temp < 10) digit += temp; 
    if (temp > 9) { 
     switch (temp) { 
      case 10: digit="A"; break; 
      case 11: digit="B"; break; 
      case 12: digit="C"; break; 
      case 13: digit="D"; break; 
      case 14: digit="E"; break; 
      case 15: digit="F"; break; 
     } 
    } 
    if (n > 0) return intToHex((n-temp)/16) + digit; 
    return ""; 
} 

public static void main(String[] args) { 
    System.out.println(intToHex(1234)); 
    System.out.println(intToHex(257)); 
    System.out.println(intToHex(0)); 
} 


} 

它工作得很好,在main方法中使用的前两个例子,但我不能得到它显示零。有没有办法让它显示零而不会修改太多?我已经讨论了一段时间了,我无法想出一个方法来做到这一点,而不会在每个其他数字之前至少添加一个零。 任何帮助,将不胜感激。

+0

有时候,你有,你所要做的除了“直”算法一些特殊情况。在这种情况下,我会在返回给用户之前检查最后一个字符串。如果它是空的,将其设置为单个“0”。 – markspace 2014-11-14 20:53:54

如何:

private static String intToHex(int n) { 
    int temp = n % 16; 
    String digit = ""; 

    if (temp < 10) digit += temp; 
    if (temp > 9) { 
     switch (temp) { 
      case 10: digit="A"; break; 
      case 11: digit="B"; break; 
      case 12: digit="C"; break; 
      case 13: digit="D"; break; 
      case 14: digit="E"; break; 
      case 15: digit="F"; break; 
     } 
    } 
    if ((n-temp)/16 == 0) return digit; 
    if (n > 0) return intToHex((n-temp)/16) + digit; 
    return ""; 
} 

public static void main(String[] args) { 
    System.out.println(intToHex(1234)); 
    System.out.println(intToHex(257)); 
    System.out.println(intToHex(0)); 
} 

只添加额外的if语句,

if ((n-temp)/16 == 0) return digit; 
+0

是的,对不起,我应该更具体。我不能只是添加另一个变量的方法。 – skulpt 2014-11-14 21:09:59

+0

@skulpt检查更新的版本,我认为这可以修复它。 – 2014-11-14 21:10:22

+0

谢谢!我很长一段时间都不会想到这件事。 – skulpt 2014-11-14 21:15:53