我的二元转换器的简要说明

时间:2014-09-24 21:02:35

标签: java binary converter

我还是java的新手 我有代码,但我仍然感到困惑它是如何工作的

所以任何人都可以向我解释我的代码如何将二进制转换为十六进制? 我对嵌套for循环部分有点混淆 所以请帮助我理解这里的逻辑

继承我的代码:

import java.io.*;

public class arrays {
    public static void main(String[] args) throws IOException {
        BufferedReader input = new BufferedReader(new InputStreamReader(
                System.in));
        // Binary Storage
        String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
                "B", "C", "D", "E", "F" };
        String[] binary = { "0000", "0001", "0010", "0011", "0100", "0101",
                "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101",
                "1110", "1111" };
        // For User!, input a value:
        System.out.print("Input your Hex Number here : ");
        String userInput = input.readLine();
        String result = "";

        for (int i = 0; i < userInput.length(); i++) {
            /* used for separating the value */
            char temp = userInput.charAt(i);
            String temp2 = "" + temp + "";
            for (int j = 0; j < hex.length; j++) {
                if (temp2.equalsIgnoreCase(hex[j])) {
                    result = result + "\n" + temp + "- " + binary[j];
                }
            }
        }

        //Main output
        System.out.println("THE BINARY OF " + userInput + ":" + result);


    }
}

1 个答案:

答案 0 :(得分:0)

您的代码确实有效,但效率低下。还有一些简化空间。

首先,你可以做些什么来提高你的程序效率,为二进制字符串构建一个HashMap<Character, String>十六进制字符:

HashMap<Character, String> map = new HashMap<Character, String>();
map.put("0", "0000");
map.put("1", "0001");
// ...
map.put("F", "1111");

现在你不需要内部for循环,因为按键的地图查找在技术上是恒定的时间,所以比较值会快得多。

此外,不是使用+符号来连接字符串,而是使用StringBuilder来构建结果并加快速度(read why here)。

另外,为了便于阅读,您应该使用更重要的变量名而不是temptemp2

以下代码的外观(full running sample link):

    // ...
    StringBuilder result = new StringBuilder();

    for (int i = 0; i < userInput.length(); i++) {
            /* used for separating the value */
            char hexVal = userInput.charAt(i);
            String binary = map.get(hexVal);
            result.append(binary);
    }

    //Main output
    System.out.println("THE BINARY OF " + userInput + ":" + result.toString());

通常,这些类型的转换首先转换为十进制值,然后转换为正确值,因此:

binary -> decimal -> hex
hex -> decimal -> binary

Java已经有一些方法可以帮助你做到这一点。

这是如何将包含十六进制数的String转换为包含该数字的二进制值的String

String hex = "f";                                // 15 in hex
int decimal = Integer.parseInt(hex, 16);         // this gives 15 in decimal (converts from base 16 to base 10)
String binary = Integer.toBinaryString(decimal); // this gives "1111"
System.out.println(binary);                      // this prints "1111"

这是您可以将包含二进制数的String转换为包含该数字的十六进制值的String

String binary = "1111";                    // 15 in decimal
int decimal = Integer.parseInt(binary, 2); // this gives 15 in decimal (converts from base 2 to base 10)
String hex = Integer.toHexString(decimal); // this gives "f"
System.out.println(hex);                   // this prints "f"

现在,对于您的程序,您可以使用这些方法,不需要String[] hexString[] binary数组或for循环:

public static void main(String[] args) throws IOException {
    BufferedReader input = new BufferedReader(new InputStreamReader(
            System.in));

    // For User!, input a value:
    System.out.print("Input your Hex Number here : ");
    String userInput = input.readLine();

    // conversion from hex to binary in one line, ain't that awesome :)
    String result = Integer.toBinaryString(Integer.parseInt(userInput, 16));

    //Main output
    System.out.println("THE BINARY OF " + userInput + ":" + result);

}

现在,当然,您已经处理了无效输入,要么捕获Integer.parseIntInteger.toBinaryString抛出的异常,要么使用自己的函数来检查输入是否是有效的十六进制数。