如何使我的程序输出二进制文件反向

时间:2014-10-14 00:45:58

标签: java

我的任务是将小数输出到二进制文件。一个例子是输入100然后二进制输出将是1100100。

我的代码:

import java.util.Scanner;

public class Dec2Bin {
    public static void main(String[] args){
        System.out.println("Welcome to Decimal Number to Binary Converter");
        System.out.println("");

        Scanner s = new Scanner(System.in);

        System.out.println("Enter a decimal number (-1 to end):");
        int input = s.nextInt();

        for ( ; ; ){
            if (input < 0)
                break;

            String bi = "";

            while(input != 0){
                bi = ((input % 2) + bi);
                input = input / 2;
            }
            System.out.println("The binary number is:" + bi);
        }
    }
}

现在我的程序卡在无限循环中,二进制数打印出来是0010011.我无法弄清楚如何停止无限循环并反转我的二进制数以使其正确。

2 个答案:

答案 0 :(得分:2)

你的循环永远运行的原因是你的休息条件

 if (input < 0)
            break;

永远不会是真的。如果你继续将整数乘以2,它将收敛到0;但是,0除以2仍为0,因此整数永远不会低于0。

考虑将循环更改为:

while(input > 0) {
    // code here
}

这样,当输入为0时,循环将结束。您也不会需要内部while循环。

虽然有一些方法可以按正确的顺序实际构建二进制数,但这不是你的问题。要了解它反向构建的原因,只需使用您的测试用例并跟踪程序:

--- input = 100
100 % 2 == 0;
bi = 0;
--- input = 50
50 % 2 == 0;
bi = 00;
--- input = 25
25 % 2 == 1;
bi = 001;
--- and so on

要在转换数字时反转字符串,要么创建自己的函数(应该相对简单),要么使用方便的StringBuilder方法:

String biReverse = new StringBuilder(bi).reverse().toString();

答案 1 :(得分:0)

以下条件是无限循环的原因。

if (input < 0)
    break;

如果继续分割,答案将不会低于零/负。它应该是:

if (input == 0)
    break;

(此条件可以修改为for循环)。否则你的程序会运行。我没有反过来得到回应......

另外,为了使其成为一个适当的菜单驱动程序,你将再次需要改变条件&amp;把int input = s.nextInt();放在for循环中。