我可以在十六进制到二进制转换器中使用开关结构吗?

时间:2014-10-02 14:40:10

标签: java binary hex converter

我在这里再次提问。 早些时候我们必须在我学校的一位讲师解释我们的课程,谢天谢地,我解释得很好。但问题是我使用的代码是Hashmapping,但这还没有教给我们

所以教授告诉我,我可以使用开关结构而不是使用Hashmapping,但我不知道如何在switch方法中翻译它。

你能告诉我是否有可能在我的程序中创建一个Switch ..

PS:我知道我可以使用二进制内置..但这是要求

谢谢

我的代码:

    import java.util.*;
import java.io.*;

class Jasper {
    public static void main(String[] args) throws IOException {
        BufferedReader input = new BufferedReader(new InputStreamReader(
                System.in));
        HashMap<Character, String> map = new HashMap<Character, String>();
        map.put('0', "0000");
        map.put('1', "0001");
        map.put('2', "0010");
        map.put('3', "0011");
        map.put('4', "0100");
        map.put('5', "0101");
        map.put('6', "0110");
        map.put('7', "0111");
        map.put('8', "1000");
        map.put('9', "1001");
        map.put('A', "1010");
        map.put('B', "1011");
        map.put('C', "1100");
        map.put('D', "1101");
        map.put('F', "1111");
        System.out.print("Input your Hex Number here : ");
        String userInput = input.readLine();
        String x = userInput.toUpperCase();
        String resultx = "";

        for (int i = 0; i < userInput.length(); i++) {
            char hexVal = x.charAt(i);
            String binary = map.get(hexVal);
            resultx = resultx + "\n" + hexVal + "-" + binary;
        }
        System.out.println("The Binary of " + x + ":" + resultx);

    }
}

4 个答案:

答案 0 :(得分:3)

由于您想使用switch,我们将其提取到类似

的方法中
public static String charToBin(char ch) {
    switch (Character.toUpperCase(ch)) {
    case '0': return "0000";
    case '1': return "0001";
    case '2': return "0010";
    case '3': return "0011";
    case '4': return "0100";
    case '5': return "0101";
    case '6': return "0110";
    case '7': return "0111";
    case '8': return "1000";
    case '9': return "1001";
    case 'A': return "1010";
    case 'B': return "1011";
    case 'C': return "1100";
    case 'D': return "1101";
    case 'E': return "1110";
    case 'F': return "1111";
    }
    return "Unknown";
}

然后,您可以使用类似

的方法将String从十六进制转换为二进制
public static String hexToBinary(String in) {
    if (in == null) {
        return null;
    }
    StringBuilder sb = new StringBuilder();
    for (char ch : in.toCharArray()) {
        sb.append(charToBin(ch));
    }
    return sb.toString();
}

最后,您可以使用类似

的方法进行测试
public static void main(String[] args) {
     for (int i = 0; i < 1000; i++) {
         String val = Integer.toHexString(i);
         String cust = hexToBinary(val);
         assert(Integer.parseInt(cust, 2) == i);
     }
}

答案 1 :(得分:0)

或者你可以这样做:

/*ToDo - use your favourite parser to convert your string to an integer*/
System.out.println(Integer.toBinaryString(x/*x is type int*/));

在软件开发中非常重要,不要重新发明东西。标准代码也是自我记录的。

(另一种方法是重复使用>>并使用%|^之类的运算符依次抽出每个位。)

答案 2 :(得分:0)

for (int i = 0; i < userInput.length(); i++) {
            char hexVal = x.charAt(i);
            String binary;
            switch (hexVal) {
        case '0':
                 binary = "0000";
                 break;
        case '1':
                 binary = "0001";
                 break;
        case '2':
                 binary = "0010";
                 break;
        case '3':
                 binary = "0011";
                 break;
        case '4':
                 binary = "0100";
                 break;
        case '5':
                 binary = "0101";
                 break;
        case '6':
                 binary = "0110";
                 break;
        case '7':
                 binary = "0111";
                 break;
        case '8':
                 binary = "1000";
                 break;
        case '9':
                 binary = "1001";
                 break;
        case 'A':
                 binary = "1010";
                 break;
        case 'B':
                 binary = "1011";
                 break;
        case 'C':
                 binary = "1100";
                 break;
        case 'D':
                 binary = "1101";
                 break;
        case 'E':
                 binary = "1110";
                 break;
        case 'F':
                 binary = "1111";
                 break;
    }
            resultx = resultx + "\n" + hexVal + "-" + binary;
}

答案 3 :(得分:0)

正如之前的贡献者已经写过的那样,您可以使用几种优雅的算法来提供正确的结果,但是使用switch()语句,只需对代码进行最小的更改,就可以这样:

import java.util.*;
import java.io.*;

class Jasper {
    public static void main(String[] args) throws IOException {
        BufferedReader input = new BufferedReader(new InputStreamReader(
                System.in));
        System.out.print("Input your Hex Number here : "); 
        String userInput = input.readLine();
        String x = userInput.toUpperCase();
        String resultx = "";
        String binVal;

        for (char hexChar : x.toCharArray()) {

            switch (hexChar) {
                case('0') : binVal="0000"; 
                            break;
                case('1') : binVal="0001"; 
                            break;
                case('2') : binVal="0010"; 
                            break;
                ....
                case('F') : binVal="1111"; 
                            break;
                default : binVal="invalid input";
            }
            resultx = resultx + "\n" + hexChar + "-" + binVal;
        }
        System.out.println("The Binary of " + x + ":" + resultx);
   }
}