【问题标题】:Java Decimal to Hexadecimal using the basicsJava十进制到十六进制使用基础
【发布时间】:2017-09-26 10:01:30
【问题描述】:

我一直在研究数字系统计算器(refer to my binary question) 现在我被困在十六进制部分。我一直在使用 switch 结构,但输出是这样的:

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

实际答案应该是 A5,剩下的 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

【问题讨论】:

  • 为什么不只是String output = Integer.toString(given, base)
  • @Andreas 我们应该使用基础知识,我们不允许使用方法或数组:(
  • 是的,您的代码有问题。有几件事,但它很困惑,不清楚你为什么期望它起作用。除其他外,您在循环中打印十六进制数字 A-F,但任何小于该数字的数字都会 *add 输出(为什么?),然后仅在循环结束时打印。奇怪。
  • 欢迎来到 Stack Overflow!请使用tour,环顾四周,并通读help center,尤其是How do I ask a good question?What topics can I ask about here?。 - 请添加Minimal, Complete, and Verifiable example。从您的示例代码中不清楚变量output 是什么类型
  • 像往常一样,这里没有十进制,只有二进制。

标签: java numbers hex decimal system


【解决方案1】:

您正在打印 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);

【讨论】:

  • 天哪,Eran 再次拯救了这一天,非常感谢!! ~^_^~
猜你喜欢
  • 2020-02-09
  • 2017-08-01
  • 2011-12-09
  • 1970-01-01
  • 2018-07-26
  • 2014-08-24
  • 2016-01-05
  • 2023-03-14
  • 2011-06-01
相关资源
最近更新 更多