2014-11-14 2 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)); 
} 


} 

Это прекрасно работает в течение первых двух примеров, используемых в основном методе, но я не могу получить его отобразить нуль. Есть ли способ заставить его отображать нуль, не изменяя слишком много? Я уже давно это переживаю, и я не могу понять, как это сделать, не добавляя по крайней мере один ноль перед каждым другим номером. Любая помощь будет оценена по достоинству.

+0

Иногда у вас есть особые случаи, когда вы должны сделать что-то кроме «прямой» алгоритм. В этом случае я проверил бы окончательную строку перед ее возвратом пользователю. Если он пуст, установите его в одиночный «0». – markspace

ответ

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 ((n-temp)/16 == 0) return digit; 
+0

Да, извините, я должен был быть более конкретным. Я не могу просто добавить другую переменную в этот метод. – skulpt

+0

@ skulpt Проверьте обновленную версию, я думаю, это исправляет ее. –

+0

СПАСИБО! Я бы не придумал это в течение долгого времени. – skulpt

Смежные вопросы