2012-04-25 76 views
4

我在獲取二進制文件時遇到了問題。我不知道什麼是錯的。二進制數字總是以亂碼結束。還有一些部分像new int[31]事情來自硬件,但我無法繞過打印實際的二進制文件。十進制到java中的二進制文件

public class DectoBinary { 
    public static void main(String[]args) { 
     Scanner CONSOLE = new Scanner(System.in); 
     System.out.print("Please enter a nonnegative integer: "); 
     int value = CONSOLE.nextInt(); 
     while (value < 0) { 
      System.out.print("number outside range."); 
      System.out.print 
       ("Please enter a nonnegative interger more than 0: "); 
      value = CONSOLE.nextInt(); 
     } 
     int[] intArray = new int[31]; 
     decimalToBinary(value, intArray); 
     System.out.println(value + "" + intArray); 
    } 
    public static int[] decimalToBinary(int value, int[]intArray) { 
     int i = 0; 
     while (value != 0) { 
      if (value % 2 == 1) 
       intArray[i] = 1; 

      else 
       intArray[i] = 0; 

      value /= 2; 
      i++; 
     } 
     return intArray; 
    } 
} 
+0

您嘗試了哪些輸入以及輸出了什麼? – sarnold 2012-04-25 03:03:04

+0

您使用的是哪個版本的java?您自己實施該方法是強制性的嗎?這是因爲Java 7擁有你想要的開箱即用功能。 – 2012-04-25 03:05:00

+0

我已經嘗試了10和100這樣的小數字作爲輸入,但intArray ususally變成像[I @ 1ced821 – user1239224 2012-04-25 03:05:36

回答

3

我認爲錯誤是在這條線:

System.out.println(value + "" + intArray); 

不能打印這樣的整數數組:您應該將其轉換爲字符串,或者寫一個循環,通過數字打印陣列數字:

for (int i : inrArray) { 
    System.out.print(intArray[i]); 
} 
System.out.println(); 

您不需要傳遞輸出數組:您可以在函數內部創建它。

public static int[] decimalToBinary(int value) { 
    int count = 1; 
    int tmp = value; 
    while (tmp != 0) { 
     tmp /= 2; 
     count++; 
    } 
    int[] intArray = new int[count]; 
    // Do the conversion here... 
    return intArray; 
} 
+0

我試過了,但輸出打印了大量的零,如10和100的數字 – user1239224 2012-04-25 03:12:59

+0

@ user1239224由於無論傳入的值是什麼,您的方法都會返回31個整數的數組,所有前導零都包含在輸出中。您可以更改程序並返回排除前導零的較小陣列。 – dasblinkenlight 2012-04-25 03:15:08

+0

等待,但我如何包括我,如果我在主要方法打印它?我以爲我只是返回intArray? – user1239224 2012-04-25 03:17:59

0

System.out.println(value +「」+ intArray); 的「intArray」是一個數組的地址,所以,如果你想獲得實際的二進制就可以使用Arrays.toString(intArray)

1

其實是一個非常簡單的方法使用的BigInteger

在java中得到二進制數
public String dectoBin(int num){ 
    String s = ""+num; 
    BigInteger bi = new BigInteger(s); 
    String bin = bi.toString(2); 
    return bin 
} 

BigInteger.toString(2)返回存儲在括號內指定的數字庫中的數字。是一個非常簡單的方法來解決這個問題。

+0

這是一項家庭作業,我懷疑他可以使用這樣的功能爲他做。 – twain249 2012-04-25 03:42:33

0

作爲dasblinkenlight,您需要逐項打印數組。如果你想有一個不錯的選擇,你可以使用值模2的遞歸印刷(模2爲您提供1或0)

/** print directly*/ 
public static void decimalToBinary(int value) { 

    if(value > 1){ 
     System.out.print(decimalToBinary(value/2) + "" + (value%2)); 
     /**recursion with implicit cast to string*/ 
    } else { 
     System.out.print((value==0)?"":"1"); 
    } 
} 

它適用於任何基地

0

那麼實際上打印的陣列,因爲陣列中的所有插槽都初始化爲0,因此您需要檢測第一個插槽的位置。 需要更換

System.out.println(value + "" + intArray); 

像這樣的東西;

System.out.println(vale + " "); 
boolean sw = false; 
for(int i=0;i<intArray.length;i++){ 
    if(!sw) 
     sw = (intArray[i]==1);//This will detect when the first 1 appears 
    if(sw) 
     System.out.println(intArray[1]); //This will print when the sw changes to true everything that comes after 
} 
0

這是一個轉換十進制數的程序。進入二進制。

import java.util.Scanner; 

public class decimalToBinary { 

    static int howManyTerms (int n) { 
     int term = 0; 

     while (n != 0) { 
      term ++; 
      n /= 2; 
     } 

     return term; 
    } 

    static String revArrayofBin2Str (int[] Array) { 
     String ret = ""; 
     for (int i = Array.length-1; i >= 0; i--) 
      ret += Integer.toString(Array[i]); 

     return ret; 
    } 

    public static void main (String[] args) { 

     Scanner sc=new Scanner (System.in); 

     System.out.print ("Enter any no.: "); 
     int num = sc.nextInt(); 
     int[] bin = new int[howManyTerms (num)]; 

     int dup = num, el = -1; 

     while (dup != 0) { 
      int rem = dup % 2; 
      bin [++el] = rem; 
      dup /= 2; 
     } 

     String d2b = revArrayofBin2Str(bin); 

     System.out.println("Binary of " + num + " is: " + d2b); 
    } 
} 
-1

這是簡單的java代碼,用於只使用原始類型int的decimal到binary,希望它可以幫助初學者。

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class DtoB { 
    public static void main(String[] args) { 

     try { // for Exception handling of taking input from user. 

      System.out.println("Please enter a number"); 

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
      String input = br.readLine();  
      int x = Integer.parseInt(input); 

      int bin = 0; 
      int p = 1; 
      while (x > 0) { 
       int r = x % 2; 
       bin = (r * p) + bin; 
       x = x/2; 
       p *= 10; 
      } 
      System.out.println("Binary of " + input + " is = " + bin); 
     } catch (Exception e) { 
      System.out.println("Please enter a valid decimal number."); 
      System.exit(1); 
      e.printStackTrace(); 
     } 
    } 
}