使用递归方法Java将十进制转换为十六进制

时间:2013-11-22 17:27:16

标签: java recursion hex decimal

我需要创建一个将十进制转换为十六进制的递归方法。 我无法使用Integer.toHexString。 编辑:我尝试了这段代码,但它无法正常工作

public static String Hexa(String s) {
    String result = "";
    int n = Integer.parseInt(s);
    int remainder = n % 16;

    if (n == 0) {
        return Integer.toString(0);
    } else {
        switch (remainder) {
            case 10:
                result = "A" + result;
                break;
            case 11:
                result = "B" + result;
                break;
            case 12:
                result = "C" + result;
                break;
            case 13:
                result = "D" + result;
                break;
            case 14:
                result = "E" + result;
                break;
            case 15:
                result = "F" + result;
                break;
            default: result = Integer.toString(n/16) + result; break;
        }
        System.out.println(result);
        return Hexa(Integer.toString(n/16)) + result;
    }
}

编辑: 更改了default case和if (n == 0)循环返回语句,它现在运行得非常好。

新代码:

 public static String Hexa(String s) {
        String result = "";
        int n = Integer.parseInt(s);
        int remainder = n % 16;

        if (n == 0) {
            return "";
        } else {
            switch (remainder) {
                case 10:
                    result = "A";
                    break;
                case 11:
                    result = "B";
                    break;
                case 12:
                    result = "C";
                    break;
                case 13:
                    result = "D";
                    break;
                case 14:
                    result = "E";
                    break;
                case 15:
                    result = "F";
                    break;
                default:
                    result = remainder + result;
                    break;
            }
            return Hexa(Integer.toString(n / 16)) + result;
        }
    }

3 个答案:

答案 0 :(得分:3)

问题出在你的默认条款中:

default: result = Integer.toString(n/16) + result; break;

应该是:

default: result = Integer.toString(remainder) + result; break;

这将使您的程序返回“04D2”。

但是你可以做出其他一些修正:

  1. 停止来回转换为String。例如,同一行可以只是:

    default: result = remainder + result; break;

    另外,将参数时间更改为int。如果您确实需要收到String,请将其设为辅助功能,并使主要功能获得String

  2. break

  3. 结尾处default不需要'F' = 'A' + (15 - 10)
  4. 您不需要开关。不是Integer.toString(0)?您可以弄清楚如何制作一个公式,将[10,15]范围内的任何数字转换为相应的字母。

  5. 您可以使用"0"代替"",但这甚至不是必需的,您可以使用0来避免引导"0"你的输出。如果您担心处理整数为{{1}}的特殊情况,请添加特殊条款。

答案 1 :(得分:1)

以下代码可以帮助您解决问题:

public static String decimalToAnyBase(int num,int base) {       
    if(num<base) {
        return num+"";
    }
    String result=null;
    int rem=num%base;
    String str=decimalToAnyBase(num/base, base);
    result=str+((rem>=10)? (char)(rem-10+'A')+"":rem);
    return result;
}

答案 2 :(得分:0)

嗯,对于你问题的第二部分,我相信你得到了Mr.MondKin的答案。

同时对于问题的第一部分,这里是将十进制转换为十六进制的递归方法。

import java.util.Scanner;

public class DecimalToHexaDemo
{
   char hexa[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
   int temp;
   String hexaDecimal = "";
   String hexadecimal(int num)
   { 
      if(num != 0)
      {
         temp = num % 16;
         hexaDecimal = hexa[temp] + hexaDecimal;
         num = num / 16;
         hexadecimal(num);
      }
      return hexaDecimal;
   } 

   public static void main(String[] args)
   {
      DecimalToHexaDemo dth = new DecimalToHexaDemo();
      int decimalNumber;
      Scanner sc = new Scanner(System.in); 
      System.out.println("Please enter decimal number: ");
      decimalNumber = sc.nextInt();
      System.out.println("The hexadecimal value is : ");
      String str = dth.hexadecimal(decimalNumber); 
      System.out.print(str);
      sc.close();
   }
}

来源和参考 - decimal to hexadecimal java program