我做错了什么(Java)十进制到二进制

时间:2014-02-26 17:30:25

标签: java binary decimal

这是我写的代码: 例如,

1.) Input =12
2.) No. of Digits = 2
3.) 00 (this is it: Expected Result 1100)

打印一半的二进制文件,但我真的不知道另一半的位置。

    import java.util.Scanner;
    class Decimal_to_Binary
    {
        public static void main(String args[])
        {
            Scanner Prakhar=new Scanner(System.in);
            System.out.println("Enter a Number");
            int x=Prakhar.nextInt();
            int z=x;
            int n=(int)Math.floor(Math.log10(x) +1);
            System.out.println("No. of Digits="+n);
            int a[]=new int[n];
            int b=0;
            int j=0;
            while (x!=0)
            {
                x=z%2;
                a[j]=x;
                j++;
                z=z/2;
            }
            int l=a.length;
            for(int i=0;i<l;i++)
            {
                System.out.print(a[i]);
            }
        }
    }

P.S。我知道还有其他方法可以做到,所以请不要建议使用其他方法。

2 个答案:

答案 0 :(得分:1)

您的代码中存在一些问题:

1)计算二进制(n)中的数字位数(它应该是ceil(Math.log2(数字))。由于Math.log2在java中不可用,我们计算Math.log10(数字)/ Math .log10(2)

2)条件检查while(x!= 0)它应该是while(z!= 0),因为你在每个循环中将z跳水2

3)反向打印列表以打印正确的二进制表示。

以下是更正后的代码:

public static void main(String args[])
 {
     Scanner Prakhar=new Scanner(System.in);
     System.out.println("Enter a Number");
     int x=Prakhar.nextInt();
     int z=x;

     // correct logic for computing number of digits
     int n=(int)Math.ceil(Math.log10(x)/Math.log10(2));

     System.out.println("No. of Digits="+n);
     int a[]=new int[n];
     int b=0;
     int j=0;
     while (z!=0)  // check if z != 0
     {
         x=z%2;
         System.out.println(x);
         a[j]=x;
         j++;
         z=z/2;
     }
     int l=a.length;

     //reverse print for printing correct binary number
     for(int i=l-1;i>=0;--i)
     {
         System.out.print(a[i]);
     }
 }

答案 1 :(得分:0)

实际上你在While循环中使用的循环检查条件是错误的。

while (x!=0)    
{
       x=z%2;     --> Here x is 0 in case of even number and 1 in case of odd 
       a[j]=x;
       j++;
       z=z/2;
}

这里x在偶数的情况下为0,在奇数的情况下为1(参见While循环内的第一行) 所以在你的例子中你使用12,所以对于第一次和第二次迭代,x计算为0,因此这将打印,并且在第二次迭代后x变为1,因此在循环中断时。

使用以下条件 -

 while (z!=0)    
    {
           x=z%2;     
           a[j]=x;
           j++;
           z=z/2;
    }