我的任务是将小数输出到二进制文件。一个例子是输入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.我无法弄清楚如何停止无限循环并反转我的二进制数以使其正确。
答案 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循环中。