Java 如何仅使用while和if-else循环转换为十六进制

Java 如何仅使用while和if-else循环转换为十六进制,java,hex,base,Java,Hex,Base,我必须仅使用标题中提到的循环将给定的数字从十进制转换为十六进制。表示循环没有。到目前为止,一切正常。它打印2AB没有问题,34821打印8805。问题是两位数之间需要一个整数。例如,我无法将31388转换为7A9C。我知道我的问题是什么,但我不知道如何解决它 import java.util.Scanner; public class Lab12abHexNumbersTEST { public static void main(String[] args) { Scann

我必须仅使用标题中提到的循环将给定的数字从十进制转换为十六进制。表示循环没有。到目前为止,一切正常。它打印2AB没有问题,34821打印8805。问题是两位数之间需要一个整数。例如,我无法将31388转换为7A9C。我知道我的问题是什么,但我不知道如何解决它

import java.util.Scanner;
public class Lab12abHexNumbersTEST
{
   public static void main(String[] args)
   {
     Scanner decimal = new Scanner(System.in);
     System.out.println("Enter a decimal number between 1 and 50,000: ");
     int num = decimal.nextInt();

     String hex1 = ""; 
     String letter = "";
     String hex3 = "";
     String hex_last = "";
     int dec = num;
     while (dec > 0)
     {
         hex1 = (dec % 16) + hex1;

         if(dec % 16 >= 9){
            hex1 = "";

            if(dec % 16 == 15) {
               letter = "F" + letter + hex1;
            } else if (dec % 16 == 14) {
               letter = "E" + letter + hex1;
            } else if (dec % 16 == 13) {
               letter = "D" + letter + hex1;
            } else if (dec % 16 == 12) {
               letter = "C" + letter + hex1;
            } else if (dec % 16 == 11) {
               letter = "B" + letter + hex1;
            } else if (dec % 16 == 10) {
               letter = "A" + letter + hex1;
            } 

            System.out.println(letter);
         }
         hex3 = hex1 + letter;

         dec = dec / 16;

      }

      hex_last = hex3; 
      System.out.println("The decimal number " + num + " in hexadecimal is " 
+ hex_last);
  }   
}  

我已经提供了这个问题的解决方案

注意:我使用了switch语句使代码更简洁,但我相信您知道如何将它们转换回if/else情况。如果你需要帮助,请询问

注意:我使用了StringBuilder,而不是直接使用字符串。您可以轻松地将这些更改为字符串,但我选择了stringbuilder,因为它同样可以使代码更干净

public static void main(String[] args) {
        int dec = 31388 ;
        StringBuilder hexString = new StringBuilder();

        while (dec != 0){
            int hexDigit = dec%16; // obtain this remainder
            dec /= 16; //update dec

            if (hexDigit < 10) hexString.insert(0, hexDigit);
            else {
                switch (hexDigit) {
                    case 10 :
                        hexString.insert(0, "A");
                        break;
                    case 11 :
                        hexString.insert(0, "B");
                        break;
                    case 12 :
                        hexString.insert(0, "C");
                        break;
                    case 13 :
                        hexString.insert(0, "D");
                        break;
                    case 14 :
                        hexString.insert(0, "E");
                        break;
                    case 15 :
                        hexString.insert(0, "F");
                        break;
                    default: break;
            }
        }
    } // while
    System.out.println(hexString);
}
使用字符串,解决方案是:

public static void main(String[] args) {
    int dec = 31388;
    String answer = "";

    while (dec != 0){
        int hexDigit = dec%16; // obtain this remainder
        dec /= 16; //update dec

        if (hexDigit < 10) {
            answer = hexDigit + answer;
        }
        else {
            if (hexDigit == 10) {
                answer = "A" + answer;
            } else if (hexDigit == 11) {
                answer = "B" + answer;
            } else if (hexDigit == 12) {
                answer = "C" + answer;
            } else if (hexDigit == 13) {
                answer = "D" + answer;
            } else if (hexDigit == 14) {
                answer = "E" + answer;
            } else if (hexDigit == 15) {
                answer = "F" + answer;
            }
        }
    } // while
    System.out.println(answer);
}
publicstaticvoidmain(字符串[]args){
int dec=31388;
字符串答案=”;
while(dec!=0){
int hexDigit=dec%16;//获取此余数
十二月//=16;//更新十二月
如果(十六位数<10){
答案=六位数+答案;
}
否则{
如果(十六位数==10){
回答=“A”+回答;
}else if(十六进制数字==11){
回答=“B”+回答;
}else if(十六进制数字==12){
答案=“C”+答案;
}else if(十六位数==13){
回答=“D”+回答;
}else if(十六位数==14){
回答=“E”+回答;
}else if(十六位数==15){
回答=“F”+回答;
}
}
}//而
System.out.println(应答);
}

如果允许使用字符串函数:

import java.util.*;
公共静态void main(字符串[]args){
int dec=31388;
字符串数字=“0123456789ABCEDF”;
StringBuilder hexString=新的StringBuilder();
while(dec!=0){
hextstring.insert(0,digits.indexOf(dec%16));
dec/=16;
}
System.out.println(十六进制字符串);
}

不要把信看得那么特别。将当前十六进制“数字”(可能是字母也可能不是)设置为变量中的字符串,将其前置到结果字符串,将
dec
除以16,然后重复。顺便说一句:
if
-
else
只是一个语句,不是一个循环。谢谢您的帮助,但是您能将开关转换为if-else,将stringbuilder转换为字符串吗?当我试着去做的时候,我想我把事情搞砸了。@C.Domingos应要求转换了。如果可能,请将答案标记为已接受。谢谢,对不起,最后一件事。我输入了您输入的内容,然后将字符串生成器更改为常规字符串,但输出是反向的。我将尝试发布代码,以便您可以看到我的意思尝试更改
hex3=hex1+字母
hex3=字母+hex1--我正在为您解决问题。我已经解决了。谢谢你的帮助
public static void main(String[] args) {
    int dec = 31388;
    String answer = "";

    while (dec != 0){
        int hexDigit = dec%16; // obtain this remainder
        dec /= 16; //update dec

        if (hexDigit < 10) {
            answer = hexDigit + answer;
        }
        else {
            if (hexDigit == 10) {
                answer = "A" + answer;
            } else if (hexDigit == 11) {
                answer = "B" + answer;
            } else if (hexDigit == 12) {
                answer = "C" + answer;
            } else if (hexDigit == 13) {
                answer = "D" + answer;
            } else if (hexDigit == 14) {
                answer = "E" + answer;
            } else if (hexDigit == 15) {
                answer = "F" + answer;
            }
        }
    } // while
    System.out.println(answer);
}