为什么我的 Bit String to Hex String 代码没有打印出结果?
Why isn't my Bit String to Hex String code printing the result?
我正在尝试打印位字符串到十六进制字符串的转换结果,但它什么也没打印。换句话说 000110011101 应该打印“19d”是我的临时变量问题吗?
在此先感谢您的帮助,这是我的代码:
public static void BinaryToHex() {
Scanner scanner = new Scanner(System.in);
String bitString = "";
String hexString = "";
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" };
System.out.println("Enter a bit string: ");
bitString = scanner.next();
for (int i = 0; i < bitString.length(); i++) {
char temp = bitString.charAt(i);
String temp2 = "" + temp + "";
for (int j = 0; j < binary.length; j++) {
if (temp2.equalsIgnoreCase(binary[j])) {
hexString = hexString + hex[j];
}
}
}
System.out.print("The equivalent hex string is ");
System.out.println(hexString);
}
您的 temp2
字符串每次都在外部 for 循环内重新定义,循环遍历输入字符串的 char
。这意味着 temp2
实际上永远不会包含超过一个符号(因为它在循环的每次迭代中都会重置),因此永远不会等于 binary
数组中的任何字符串。
您需要先在循环外将 temp2
字符串定义为 String temp2 = ""
,然后在循环内将 temp
附加到它。
for (int i = 0; i < bitString.length(); i++) {
char temp = bitString.charAt(i);
String temp2 = "" + temp + "";
for (int j = 0; j < binary.length; j++) {
if (temp2.equalsIgnoreCase(binary[j])) {
hexString = hexString + hex[j];
}
}
}
在此循环中,您尝试一次获取位串的一个字符,并将其与所有输入长度为 4
的二进制 [] 数组的输入进行比较。所以基本上你试图将 1
长度元素与 4
长度元素进行比较,这永远不会是真的。
因此 HexString 永远不会改变,它会打印出与您初始化时相同的内容 it.So 您在执行代码时什么也得不到。
你可以有一个长度为 4
的 bitString 子串并将其存储在 temp2 中,然后这段代码将起作用,并且对于每个 4
位都有一个 HexCharacter 所以你不能制作 1 位数转换为二进制数。
所以按照你的逻辑,bitString length
应该是 4
的倍数,否则它不会从 hex
数组中给出相应的十六进制字符。
用这个替换代码中的 for 循环。
if(bitString.length()%4!=0)
System.out.println("Please Enter Valid Input.");
else
{
for (int i = 0; i < bitString.length()/4; i++)
{
String temp2 = bitString.substring(4*i,4*(i+1));
for (int j = 0; j < binary.length; j++)
{
if (temp2.equalsIgnoreCase(binary[j]))
{
hexString = hexString + hex[j];
}
}
}
System.out.print("The equivalent hex string is ");
System.out.println(hexString);
}
我正在尝试打印位字符串到十六进制字符串的转换结果,但它什么也没打印。换句话说 000110011101 应该打印“19d”是我的临时变量问题吗?
在此先感谢您的帮助,这是我的代码:
public static void BinaryToHex() {
Scanner scanner = new Scanner(System.in);
String bitString = "";
String hexString = "";
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" };
System.out.println("Enter a bit string: ");
bitString = scanner.next();
for (int i = 0; i < bitString.length(); i++) {
char temp = bitString.charAt(i);
String temp2 = "" + temp + "";
for (int j = 0; j < binary.length; j++) {
if (temp2.equalsIgnoreCase(binary[j])) {
hexString = hexString + hex[j];
}
}
}
System.out.print("The equivalent hex string is ");
System.out.println(hexString);
}
您的 temp2
字符串每次都在外部 for 循环内重新定义,循环遍历输入字符串的 char
。这意味着 temp2
实际上永远不会包含超过一个符号(因为它在循环的每次迭代中都会重置),因此永远不会等于 binary
数组中的任何字符串。
您需要先在循环外将 temp2
字符串定义为 String temp2 = ""
,然后在循环内将 temp
附加到它。
for (int i = 0; i < bitString.length(); i++) {
char temp = bitString.charAt(i);
String temp2 = "" + temp + "";
for (int j = 0; j < binary.length; j++) {
if (temp2.equalsIgnoreCase(binary[j])) {
hexString = hexString + hex[j];
}
}
}
在此循环中,您尝试一次获取位串的一个字符,并将其与所有输入长度为 4
的二进制 [] 数组的输入进行比较。所以基本上你试图将 1
长度元素与 4
长度元素进行比较,这永远不会是真的。
因此 HexString 永远不会改变,它会打印出与您初始化时相同的内容 it.So 您在执行代码时什么也得不到。
你可以有一个长度为 4
的 bitString 子串并将其存储在 temp2 中,然后这段代码将起作用,并且对于每个 4
位都有一个 HexCharacter 所以你不能制作 1 位数转换为二进制数。
所以按照你的逻辑,bitString length
应该是 4
的倍数,否则它不会从 hex
数组中给出相应的十六进制字符。
用这个替换代码中的 for 循环。
if(bitString.length()%4!=0)
System.out.println("Please Enter Valid Input.");
else
{
for (int i = 0; i < bitString.length()/4; i++)
{
String temp2 = bitString.substring(4*i,4*(i+1));
for (int j = 0; j < binary.length; j++)
{
if (temp2.equalsIgnoreCase(binary[j]))
{
hexString = hexString + hex[j];
}
}
}
System.out.print("The equivalent hex string is ");
System.out.println(hexString);
}