我正在努力在我的java程序中转换二进制和十六进制。我能够读取一个二进制数,但如果我输入更多,程序只读取最后一个二进制数并将其转换为十六进制数。如何读取长二进制数并将其转换为十六进制?喜欢101000011010 这是我的代码的一部分。感谢。
public String binToHex() {
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"};
String result = " ";
Scanner num = new Scanner(System.in);
String userInput = num.next();
System.out.println("You entered " + userInput);
for(int i=0; i < userInput.length(); i++) {
if (!userInput.isEmpty()) {
///System.out.print("not empty");
temp = userInput.substring(i);
}
//System.out.print("temp: " + temp);
String temp2 = ""+temp+"";
//System.out.println("temp2 " + temp2);
for(int j=0; j < binary.length; j++) {
if(temp2.equals(binary[j])) {
//System.out.print("inside if");
result = result + hex[j];
//System.out.println("results: " + result);
}
}
}
System.out.println("Hex:" + result);
return result;
}
答案 0 :(得分:0)
你的逻辑关闭了这个程序。对于输入到输入中的每个字符,您都在运行外部for
循环。如果您输入一个12位二进制数字,就像您提到的那样101000011010
,则循环运行12次。
在该循环中,您检查输入是否为空。它不是,因此它将temp设置为101000011010
。然后你设置一个无意义的temp2值(temp就足够了)等于temp。所以现在temp和temp2都等于输入101000011010
。
现在,您检查该值...(整个12位二进制字符串)101000011010
,其中包含二进制数组中的每个值。显然,你的数组中没有12位二进制输入,所以结果什么也没做。
回到外部for
循环,然后在那里设置temp等于从索引1开始的12位数字符串.IE现在你已经使temp等于11位二进制数01000011010
(缺少第一个'1'。
并且它重复这一点,将这些冗长的字符串与数组进行比较,并且找不到匹配,直到你向传递4位数字的末尾开始。
由于您的二进制数组仅包含4位数字,因此唯一可以匹配任何内容的数字最后是4位二进制数。 IE A
循环实际上在找到A之后运行了几次,但又匹配了一个3位数字,然后是2位数字,1位数字等,而且这些都不在二进制数组中。
我建议尝试一种新方法。
答案 1 :(得分:0)
你可以做这样的事情
public static void main(String[] args)
{
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" };
String result = " ";
boolean containcharacterOtherthan1or0 = false;
System.out.println("enter the number :");
Scanner num = new Scanner(System.in);
String userInput = num.next();
System.out.println("You entered " + userInput);
for (int k = 0; k < userInput.length(); k++)
{
if (!String.valueOf(userInput.charAt(k)).equals("0") && !String.valueOf(userInput.charAt(k)).equals("1"))
containcharacterOtherthan1or0 = true;
}
if (userInput.length() % 4 == 0 && !containcharacterOtherthan1or0)
{
for (int i = 0; i < userInput.length(); i = i + 4)
{
for (int j = 0; j < binary.length; j++)
{
if (binary[j].equals(userInput.substring(i, i + 4)))
{
result += hex[j];
}
}
}
System.out.println("the result is :" + result);
}
else
{
System.out.println("enter a binary number with length of muliplier of 4 ");
}
}