4

バイナリの取得に問題があります。何が悪いのかわかりません。2進数は常にぎこちないものになります。またnew int[31]、HWのもののような部分もありますが、実際のバイナリを印刷することはできません。

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;
    }
}
4

8 に答える 8

3

エラーは次の行にあると思います。

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

次のような整数の配列を出力することはできません。文字列に変換するか、配列を1桁ずつ出力するループを作成する必要があります。

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;
}
于 2012-04-25T03:05:26.470 に答える
1

Integer.toBinaryString(int)を使用するだけです。

于 2012-04-25T03:05:14.587 に答える
1

実際、これはBigIntegerを使用してJavaで2進数を取得する非常に簡単な方法です。

public String dectoBin(int num){
    String s = ""+num;
    BigInteger bi = new BigInteger(s);
    String bin = bi.toString(2);
    return bin
}

BigInteger.toString(2)括弧内に指定された数値ベースに格納されている数値を返します。この問題を回避するための非常に簡単な方法です。

于 2012-04-25T03:41:27.423 に答える
0

これが10進数を変換するプログラムです。バイナリに。

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);
    }
}
于 2013-03-13T03:27:45.487 に答える
0

System.out.println(value + "" + intArray); 'intArray'は配列のアドレスであるため、実際のバイナリを取得する場合は、Arrays.toString(intArray)を使用できます。

于 2012-04-25T03:32:44.217 に答える
0

dasblinkenlightとして、配列をアイテムごとに印刷する必要があります。優れた代替手段が必要な場合は、値mod 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");
   }
}

どのベースでも動作します

于 2012-04-25T04:59:09.737 に答える
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
}
于 2012-04-25T05:14:19.953 に答える
-1

これは、プリミティブ型のintのみを使用した10進数から2進数への単純なJavaコードであり、初心者に役立つことを願っています。

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();
        }
    }
}
于 2014-02-11T06:29:29.870 に答える