繁体   English   中英

使用基础知识将Java十进制转换为十六进制

[英]Java Decimal to Hexadecimal using the basics

我一直在研究数字系统计算器(请参阅我的二进制问题) ,现在我被困在十六进制部分。 我一直在使用开关结构,但输出如下:

Enter Number: 165
Enter Base: 16
The answer: A105

实际答案应该是A5 tho,剩下的10就是A。

这是我的代码:

int given = 0, base = 0, remainder = 0; 
String output = "";
if (base == 2||base == 8){
    while(given != 0){
        remainder = given % base;
        given /= base;
        output = remainder + output;
    }
    System.out.println(output);
}
else if (base == 16){
    while (given > 0){
        remainder = given % base;
        if (remainder <= 10){
            System.out.print("");
        }
        switch(remainder){
            case 10:System.out.print("A");break;
            case 11:System.out.print("B");break;
            case 12:System.out.print("C");break;
            case 13:System.out.print("D");break;
            case 14:System.out.print("E");break;
            case 15:System.out.print("F");break;
        }
        given /= base;
        output = remainder + output;
    }
    System.out.println(output);
}

我应该选择继续使用开关结构还是我的代码有问题?

编辑:为了清楚起见, output变量将反转特定给定的值。 如果我有一个37作为十进制转换为二进制,它将输出101001 ,实际答案是100101

您正在打印从A到F的字母,并将其余部分添加到输出中。 您应该将字母添加到输出中,而不是打印它们:

while (given > 0){
    remainder = given % base;
    if (remainder >= 10){
      switch(remainder){
        case 10:output = "A" + output;break;
        case 11:output = "B" + output;break;
        case 12:output = "C" + output;break;
        case 13:output = "D" + output;break;
        case 14:output = "E" + output;break;
        case 15:output = "F" + output;break;
      }
    } else {
      output = remainder + output;
    }
    given /= base;
}
System.out.println(output);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM