十进制到二进制java程序

时间:2014-09-15 03:07:52

标签: java binary decimal

我正在尝试创建一个java程序,用户输入一个十进制数,然后转换为二进制数。这是我到目前为止,但是while循环只循环一次,当我输入8时只给我0。我知道二进制中的8是1000所以我不明白我做错了什么。我需要编码很简单。请帮助谢谢

import java.util.Scanner;

 public class binary
 {
public static void main (String [] args)
{
    Scanner scan = new Scanner(System.in);

    int userNum = 0;
    int binary = 0;
    double newNum = 0;
    int count = 0;

    System.out.print("Enter a positive base 10 number: ");
    userNum = scan.nextInt();
    System.out.println();

    for(; (Math.pow(2,count) <= userNum); count++)
    {

    }

    while(!(count == 0))
    {
        if(userNum/Math.pow(2,count) != 0)
        {
            binary = userNum/(int)Math.pow(2,count);
            System.out.print(binary);
        }

        userNum %= Math.pow(2,count);
        count--;
        userNum %= (int)Math.pow(2,count));
    }
}
 }

4 个答案:

答案 0 :(得分:2)

你不应该重新发明轮子,使用Integer.toBinaryString(int)等等,

Scanner scan = new Scanner(System.in);

System.out.print("Enter a positive base 10 number: ");
if (scan.hasNextInt()) {
    int userNum = scan.nextInt();
    System.out.printf("%d decimal is %s binary%n", userNum,
            Integer.toBinaryString(userNum));
}

此外,Java类应以大写字母开头。因此,binary应该是Binary。最后,如果您需要将二进制转换为十进制,则可以使用Integer.parseInt(String, 2)

答案 1 :(得分:0)

您可以使用以下逻辑:

package com.java2novice.algos;

public class DecimalToBinary {

public void printBinaryFormat(int number){
    int binary[] = new int[25];
    int index = 0;
    while(number > 0){
        binary[index++] = number%2;
        number = number/2;
    }
    for(int i = index-1;i >= 0;i--){
        System.out.print(binary[i]);
    }
}

public static void main(String a[]){
    DecimalToBinary dtb = new DecimalToBinary();
    dtb.printBinaryFormat(25);
}
}

答案 2 :(得分:0)

你刚才:

for(userNum = userNum; (Math.pow(2,count) <= userNum); count++)
{

} 

而不是:

for(userNum = userNum; (Math.pow(2,count) <= userNum); count++){
while(!(count == 0))
{
    if(userNum/Math.pow(2,count) != 0)
    {
        binary = userNum/(int)Math.pow(2,count);
        System.out.print(binary);
    }

    newNum = userNum%Math.pow(2,count);
    count--;
    userNum = (int)(newNum%(int)Math.pow(2,count));
}}
}
}

基本上你是空的,如果。

答案 3 :(得分:0)

几个问题:

你的count将始终开得太高,因为for循环的最后一部分将再次递增它。

while为0时,您需要运行count循环来检查最后一位。

其余的看起来应该是好的,但我不明白这些陈述对newNum的意义。

算法的一个简单版本是使用按位运算符 - 而不是必须使用Math.pow明确除以2的幂,您可以使用按位运算符来测试位是打开还是关闭,然后打印相应地输出1和0。例如:

public static void toBinary(int n) {
   int mask = 1, nn = n;
   while(nn != 0) {
      mask << 1;
      nn /= 2;
   }
   mask >>= 1;

   while(mask != 0) {
      System.out.print( (mask & n) ? "1" : "0" );
      mask >>= 1;
   }
}

编辑:此外,您的userNum = userNumfor循环中是多余的。只需在循环的赋值部分中使用null语句(;)。所以:

for(; (Math.pow(2, count) <= userNum); count++) {