我在这里再次提问。 早些时候我们必须在我学校的一位讲师解释我们的课程,谢天谢地,我解释得很好。但问题是我使用的代码是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);
}
}
答案 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);
}
}