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

使用递归Java方法将十进制转换为十六进制,java,recursion,hex,decimal,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);

我需要创建一个递归方法,将十进制转换为十六进制。
我不能使用
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
大小写和
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;
        }
    }

问题出在您的默认子句中:

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

default: result = Integer.toString(remainder) + result; break;
这将使您的程序返回“04D2”

但是,您还可以做一些其他更正:

  • 停止来回转换为字符串。例如,同一行可以是:

    默认值:结果=余数+结果;中断

    另外,将参数time更改为
    int
    。如果您确实需要接收
    字符串
    ,则将其作为辅助函数,并使主函数接收
    字符串

  • 您不需要在
    默认值的末尾使用
    中断

  • 你不需要开关。难道不是“F”等于“A”+(15-10)?您可以找出如何制作一个公式,将[10,15]范围内的任何数字转换为相应的字母

  • 您可以使用
    “0”
    ,而不是
    整数.toString(0)
    。。。但这甚至不是必需的,您可以使用
    来避免输出中的前导
    0
    。如果您担心处理整数为“0”的特殊情况,请添加特殊条款


  • 问题出在您的默认子句中:

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

    default: result = Integer.toString(remainder) + result; break;
    
    这将使您的程序返回“04D2”

    但是,您还可以做一些其他更正:

  • 停止来回转换为字符串。例如,同一行可以是:

    默认值:结果=余数+结果;中断

    另外,将参数time更改为
    int
    。如果您确实需要接收
    字符串
    ,则将其作为辅助函数,并使主函数接收
    字符串

  • 您不需要在
    默认值的末尾使用
    中断

  • 你不需要开关。难道不是“F”等于“A”+(15-10)?您可以找出如何制作一个公式,将[10,15]范围内的任何数字转换为相应的字母

  • 您可以使用
    “0”
    ,而不是
    整数.toString(0)
    。。。但这甚至不是必需的,您可以使用
    来避免输出中的前导
    0
    。如果您担心处理整数为“0”的特殊情况,请添加特殊条款


  • 下面的代码可能会帮助您解决问题:

    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;
    }
    
    公共静态字符串decimalToAnyBase(int-num,int-base){
    如果(num=10)?(字符)(rem-10++'A')+“”:rem);
    返回结果;
    }
    
    以下代码可能会帮助您解决问题:

    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;
    }
    
    公共静态字符串decimalToAnyBase(int-num,int-base){
    如果(num=10)?(字符)(rem-10++'A')+“”:rem);
    返回结果;
    }
    
    好吧,关于你问题的第二部分,我相信你已经从蒙德金先生那里得到了答案

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

    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();
       }
    }
    

    来源和参考-。

    好吧,关于你问题的第二部分,我相信你从蒙德金先生那里得到了答案

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

    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();
       }
    }
    


    源代码和引用-。

    那么您尝试了什么?
    Integer.toHexString
    不会将十进制转换为十六进制:)您连接了两次,这就是它无法正常工作的原因。您将迭代与递归混合在一起。因此,请搜索:
    “+result”
    替换为:
    ,并将其应用于除最后一个匹配之外的所有匹配。您是否注意到在递归调用中,您正在将整数转换为字符串,只是在函数开始时将其转换回?那么您尝试了什么?
    Integer.toHexString
    不会将十进制转换为十六进制:)您连接了两次,这就是它无法正常工作的原因。您将迭代与递归混合在一起。因此,请搜索:
    “+result”
    替换为:
    ,并将其应用于除最后一个匹配之外的所有匹配。您是否注意到,在递归调用中,您正在将整数转换为字符串,只是为了在函数开始时将其转换回?我在定位它之前按照您所说的做了,请参阅我的编辑。谢谢您没有在默认子句中,您正在执行:
    result=rements+result
    。这只是为了将int改为String吗?您可以更清楚地执行此操作:
    result=“+余数”
    。或者在本例中,对于您的
    Integer.toString
    版本,如果它返回字符串且参数为int,我如何使其递归?仔细看看您的函数,返回值的类型与输入参数的类型无关。我不明白。我需要返回类型为string,否则a无法打印十六进制值an,为了使函数递归,我需要让函数调用自身。它返回一个字符串,那么输入参数类型与返回类型有何不同呢?我按照你刚才说的做了,请参见我的编辑。谢谢您没有在默认子句中,您正在执行:
    result=rements+result
    。这只是为了将int改为String吗?您可以更清楚地执行此操作:
    result=“+余数”
    。或者在本例中,对于您的
    Integer.toString
    版本,如果它返回字符串且参数为int,我如何使其递归?仔细看看您的函数,返回值的类型与输入参数的类型无关。我不明白。我需要返回类型为string,否则a无法打印十六进制值an以使函数递归i