2014-01-30 92 views
-1

我正在轉換我的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

你可以做這樣的事情

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 "); 
    } 

    } 
+0

謝謝。這有助於。 – user1277281

0

你的邏輯在這個程序中是關閉的。對於輸入到輸入中的每個字符,您正在運行外部for循環。如果你輸入一個12位二進制數,就像你提到的101000011010那麼循環運行12次。

在該循環中,您檢查輸入是否爲空。它不是,所以它設置溫度等於101000011010。然後你設置一個無意義的temp2值(溫度應該足夠),等於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位數字等等,並且這些都不在二進制數組中。

我建議嘗試一種新方法。

相關問題