Java中十进制转二进制

4

我在获取二进制方面遇到了问题,不知道出了什么问题。二进制数字总是变成乱码。有些部分比如new int[31]这个东西来自家庭作业,但我无法打印出实际的二进制数。

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

你尝试了哪些输入,得到了什么输出? - sarnold
你使用的Java版本是什么?是否必须自己实现该方法?这是因为Java 7已经内置了你需要的功能。 - Juan Alberto López Cavallotti
我已经尝试过像10和100这样的小数字作为输入,但intArray通常会变成[I@1ced821。 - user1239224
@JuanAlbertoLรณpezCavallotti ๆˆ‘ๆญฃๅœจไฝฟ็”จไธ€ไธชๅซๅšDrJava็š„็จ‹ๅบ๏ผŒๆ˜ฏๅฟ…้กป็š„ใ€‚ - user1239224
8个回答

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

我已经尝试过了,但对于像10和100这样的数字,输出会打印出许多零。 - user1239224
由于您的方法返回一个包含31个int元素的数组,无论传入的值是什么,所有前导零都会包括在输出中。您可以更改程序并返回一个较小的数组,该数组不包括前导零。 - Sergey Kalinichenko
等等,如果我在主方法中打印它,怎么才能包含 i 呢?我以为我只返回 intArray? - user1239224
@dasblinkenlight,还有第二个问题(假设他想要数字右对齐),他是按相反的顺序添加数字,所以数字是倒过来的。 - twain249
@user1239224 没问题,你可以返回一个更小的 int 数组。顺便说一下,你不需要传递它:将 int[] intArray = new int[31] 移动到 decimalToBinary 内部是完全可以接受的。此外,你不需要将其设置为 new int[31]:你可以将 value 复制到一个临时变量中,计算出需要除以二多少次才能将其变为零,并使用该计数创建 int[] intArray = new int[count] - Sergey Kalinichenko
显示剩余2条评论

1

实际上,在Java中使用BigInteger获取二进制数非常简单。

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

BigInteger.toString(2) 返回括号内指定的数值基数上存储的数字。这是一个非常简单的方法来解决这些问题。


这是一项作业任务,我怀疑他能否使用那样的函数来帮助他完成。 - twain249

1

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

System.out.println(value + "" + intArray); 'intArray' 是一个数组的地址,如果你想要获取实际的二进制值,可以使用 Arrays.toString(intArray)


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将十进制转换为二进制,希望能帮助初学者。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接