首页 > 解决方案 > 如何修复这个十六进制到二进制转换器?

问题描述

我有以下代码。问题是当我输入 0-9 个字符时代码不起作用。问题出在哪里?

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    // Enter a hex digit
    System.out.print("Enter a hex digit: ");
    String hexString = input.nextLine();

    // Enter one character
    if (hexString.length() != 1) {
        System.out.println("You must enter exactly one character");
    }

    // Display binary number for the hex digit
    char hexchar = hexString.charAt(0);

    if ((hexchar >= 'A' && hexchar <= 'F') || (hexchar >= 0 && hexchar <= 9))
    {
        System.out.print("The binary value is ");
        switch(hexchar)
        {
            case 0: System.out.println(0000); break; 
            case 1: System.out.println(0001); break; 
            case 2: System.out.println(0010); break; 
            case 3: System.out.println(0011); break; 
            case 4: System.out.println(0100); break; 
            case 5: System.out.println(0101); break; 
            case 6: System.out.println(0110); break; 
            case 7: System.out.println(0111); break; 
            case 8: System.out.println(1000); break; 
            case 9: System.out.println(1001); break; 
            case 'A': System.out.println(1010); break; 
            case 'B': System.out.println(1011); break; 
            case 'C': System.out.println(1100); break; 
            case 'D': System.out.println(1101); break; 
            case 'E': System.out.println(1110); break; 
            case 'F': System.out.println(1111); break; 
        }
    }
    else
        System.out.println(hexchar + " is and invalid input");

    }
}

我希望代码只接受一位数字,然后将其转换为二进制数。如果不是,则显示错误,或添加处理异常

编辑:(工作)

    if ((hexchar >= 'A' && hexchar <= 'F') || (hexchar >= '0' && hexchar <= '9'))
    {
        System.out.print("The binary value is ");
        switch(hexchar)
        {
            case '0': System.out.println("0000"); break; 
            case '1': System.out.println("0001"); break; 
            case '2': System.out.println("0010"); break; 
            case '3': System.out.println("0011"); break; 
            case '4': System.out.println("0100"); break; 
            case '5': System.out.println("0101"); break; 
            case '6': System.out.println("0110"); break; 
            case '7': System.out.println("0111"); break; 
            case '8': System.out.println("1000"); break; 
            case '9': System.out.println("1001"); break; 
            case 'A': System.out.println("1010"); break; 
            case 'B': System.out.println("1011"); break; 
            case 'C': System.out.println("1100"); break; 
            case 'D': System.out.println("1101"); break; 
            case 'E': System.out.println("1110"); break; 
            case 'F': System.out.println("1111"); break; 
        }

现在我正在编辑错误代码并使其变得更好。非常感谢所有帮助过的人。

标签: java

解决方案


因为hexchar是一个字符。

您需要检查“0”、“1”、“2”等,而不是 0、1、2。


Btwswitch case语句有一个default关键字,使用它代替if else.

然后可以避免“有效”字符检查,因为所有其他输入都将转到默认情况。


二进制数也应该以0b(if int) 开头。

如果要打印二进制数,请在其周围加上引号,例如“0011”,因此它会强制使用您想要的字符串。


推荐阅读