我几乎完成了实现一个代码,该代码允许用户将十进制数输入二进制,然后将二进制数反转,然后再转换回十进制。
我解决了除了二进制到十进制部分之外的所有问题。无论我输入什么,它都会一遍又一遍地给我相同的数字。我不明白为什么。基本上,为什么我的代码的最后一部分是错误的?我无法找到数组/字符串的长度,然后将其乘以 2^n 等...
这段代码有两个问题。
1)您没有存储十进制到二进制转换的结果。您应该引入新的 String 变量来存储具有反转二进制值的字符串。
2)您的二进制到十进制算法不正确。s.charAt(i) 返回 char 值,但您需要 double 值才能在计算中使用它。Math.pow(2, (s.length() - i - 1)) 也不正确 - 据我了解,它适用于非反转二进制值。
固定版本的代码应如下所示:
public static void main(String[] args) {
int a[] = {0, 1};
int number;
int remainder;
String binary = "";
Scanner in = new Scanner(System.in);
System.out.print("Enter Decimal Number: ");
number = Integer.parseInt( in.next());
System.out.print("Binary Number in Reverse: ");
do {
remainder=number%2;
if(remainder > 0){
binary += a[1];
//System.out.print(a[1]);
}
else{
binary += a[0];
//System.out.print(a[0]);
}
number=number / 2;
} while(number>0);
System.out.print(binary);
System.out.print(" \nDecimal number: ");
//String s = Integer.toString(number);
double result = 0;
for (int i = 0; i < binary.length(); i++)
result = result + Double.parseDouble(binary.substring(i, i + 1)) * Math.pow(2, i);
System.out.print(result);
}
number
根据您的 do-while 循环条件,将始终为零或更少: while(number>0);
这会导致您的变量s
(请选择更好的变量名称...)始终为“0”。
我想你可以弄清楚其余的。