2014-11-14 138 views
0

我正在做一個賦值,我必須使用遞歸將整數轉換爲十六進制字符串。我必須使用返回字符串值的方法來執行此操作。我試圖把我使用的紙張爲代碼的方法和它工作得很好:使用遞歸將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

回答

1

如何:

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

相關問題