在Java中使用循环和开关将二进制转换为十六进制
我需要使用循环和开关op来进行转换。在做出这些改变之后。我得到二进制1111110的结果,作为F,然后在下一行得到E。我怎样才能解决这个问题?我不想使用stringbuilder,因为我还没有学会。还有其他简单的代码吗?字符串是不可变的在Java中使用循环和开关将二进制转换为十六进制,java,Java,我需要使用循环和开关op来进行转换。在做出这些改变之后。我得到二进制1111110的结果,作为F,然后在下一行得到E。我怎样才能解决这个问题?我不想使用stringbuilder,因为我还没有学会。还有其他简单的代码吗?字符串是不可变的 public static void main(String[] args) { Scanner ms = new Scanner(System.in); String binary = ms.nextLine(); binary=b
public static void main(String[] args) {
Scanner ms = new Scanner(System.in);
String binary = ms.nextLine();
binary=binary.trim();
//add leading zeroes if length divided by 4 has remainder.
while (binary.length() % 4 != 0) binary = "0" + binary;
String number = "";
for (int i = 0; i < binary.length(); i += 4) {
String num = binary.substring(i, i + 3);
switch(num)
{
case "0000" : number = "0"; break;
case "0001" : number = "1"; break;
case "0010" : number = "2"; break;
case "0011" : number = "3"; break;
case "0100" : number = "4"; break;
case "0101" : number = "5"; break;
case "0110" : number = "6"; break;
case "0111" : number = "7"; break;
case "1000" : number = "8"; break;
case "1001" : number = "9"; break;
case "1010" : number = "A"; break;
case "1011" : number = "B"; break;
case "1100" : number = "C"; break;
case "1101" : number = "D"; break;
case "1110" : number = "E"; break;
case "1111" : number = "F"; break;
}
System.out.println(number);
}
}
此外,您还需要从索引0到3,而不是从0到4获取字符串。所以是i,i+3
所以在这里应该是:
binary = binary.trim(); //not just binary.trim();
另外,去掉底部的return语句,因为它在执行一次迭代时退出方法您的return语句在for循环中,因此在第一次迭代后,您将从函数返回。而且,您每次都会覆盖数字。您应该用StringBuilder和user append替换数字
另外,其他人也注意到,您的binary.trim不能按预期工作,它需要是binary=binary.trim。您的代码的直接问题是您在打印第一个数字后立即返回!删除报税表,它也会打印其他数字 另外,正如Josh所指出的,您必须执行binary=binary.trim;,as trim不会在适当位置更改字符串,而是返回字符串的修剪版本 最后,请注意,您可以用以下代码替换大部分代码
public static void main(String[] args) {
Scanner ms = new Scanner(System.in);
String binary = ms.nextLine();
binary.trim();
//add leading zeroes if length divided by 4 has remainder.
while (binary.length() % 4 != 0) binary = "0" + binary;
StringBuilder number = new StringBuilder();
for (int i = 0; i < binary.length(); i += 4) {
String num = binary.substring(i, i + 4);
switch(num)
{
case "0000" : number.append("0"); break;
case "0001" : number.append("1"); break;
case "0010" : number.append("2"); break;
case "0011" : number.append("3"); break;
case "0100" : number.append("4"); break;
case "0101" : number.append("5"); break;
case "0110" : number.append("6"); break;
case "0111" : number.append("7"); break;
case "1000" : number.append("8"); break;
case "1001" : number.append("9"); break;
case "1010" : number.append("A"); break;
case "1011" : number.append("B"); break;
case "1100" : number.append("C"); break;
case "1101" : number.append("D"); break;
case "1110" : number.append("E"); break;
case "1111" : number.append("F"); break;
}
System.out.println(number.toString());
}
return;
}
这是因为您从循环的第一次迭代返回
不管怎样,这里有一段代码,它可以实现您想要的功能,将二进制字符串转换为十六进制
它还可以保存switch语句
只需将二进制字符串值传递给它,它就会无缝工作:D当您在第一次迭代后返回时,您的循环根本没有效果。此外,字符串是不可变的。binary.trim绝对没有效果。您需要执行binary=binary.trim。为什么不改为使用int-decimal=Integer.parseIntbinary,2;字符串十六进制=整数。ToString十六进制,16;如果您必须自己实现,请遵循以下答案。或:System.out.printlnInteger.toBinaryStringn;
public static void main(String[] args) {
Scanner ms = new Scanner(System.in);
String binary = ms.nextLine();
binary.trim();
//add leading zeroes if length divided by 4 has remainder.
while (binary.length() % 4 != 0) binary = "0" + binary;
StringBuilder number = new StringBuilder();
for (int i = 0; i < binary.length(); i += 4) {
String num = binary.substring(i, i + 4);
switch(num)
{
case "0000" : number.append("0"); break;
case "0001" : number.append("1"); break;
case "0010" : number.append("2"); break;
case "0011" : number.append("3"); break;
case "0100" : number.append("4"); break;
case "0101" : number.append("5"); break;
case "0110" : number.append("6"); break;
case "0111" : number.append("7"); break;
case "1000" : number.append("8"); break;
case "1001" : number.append("9"); break;
case "1010" : number.append("A"); break;
case "1011" : number.append("B"); break;
case "1100" : number.append("C"); break;
case "1101" : number.append("D"); break;
case "1110" : number.append("E"); break;
case "1111" : number.append("F"); break;
}
System.out.println(number.toString());
}
return;
}
int n = Integer.parseInt(binary, 2);
String s = Integer.toString(n, 16);
System.out.println(s.toUpperCase());
static String binToHex(String binStr){
while(binStr.length() % 4 != 0){
binStr = "0" + binStr;
}
String hexString = "";
binStr = new StringBuilder(binStr).reverse().toString();
for(int index = 0, len = binStr.length(); index < len;){
int num = 0;
for(int indexInQuad = 0; indexInQuad < 4; indexInQuad++, index++){
int bit=Integer.parseInt(String.valueOf(binStr.charAt(index)));
num += (bit * Math.pow(2,indexInQuad));
}
hexString += Integer.toHexString(num).toUpperCase();
}
hexString = new StringBuilder(hexString).reverse().toString();
return hexString;
}