我几乎完成了一个代码,该代码允许用户将二进制数字输入二进制,然后将二进制数字反转并转换回十进制。在Java中将二进制转换为十进制
我解决了一切,除了二进制到小数部分。无论我输入什么,它都会一遍又一遍地给我一样的数字。我不明白为什么。基本上,为什么我的代码的最后一部分是错误的?我根据你do-while循环状态时遇到问题,寻找阵列/串的长度,然后将其交由2^N等乘...
我几乎完成了一个代码,该代码允许用户将二进制数字输入二进制,然后将二进制数字反转并转换回十进制。在Java中将二进制转换为十进制
我解决了一切,除了二进制到小数部分。无论我输入什么,它都会一遍又一遍地给我一样的数字。我不明白为什么。基本上,为什么我的代码的最后一部分是错误的?我根据你do-while循环状态时遇到问题,寻找阵列/串的长度,然后将其交由2^N等乘...
此代码有两个问题。
1)您没有存储小数到二进制转换的结果。你应该引入新的String变量来存储具有相反二进制值的字符串。
2)您的二进制到十进制算法不正确。 s.charAt(i)返回char值,但您需要双倍值才能在计算中使用它。 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
永远是零或更低:
这会导致变量s
(请选择更好的变量名称...)始终为“0”。
我想你可以找出其余的。
你能给我一个更大的暗示?我仍然困惑?即使我删除了do-while,它仍然是相同的错误 – Euridice01 2013-02-09 19:26:56
@ Euridice01你说:'无论我输入什么,它都会一次又一次地给我一样的数字.'你的变量's'将始终等于“ 0" 。这就是为什么你每次都得到相同的价值。请自己进行一些基本的调试,看看您是否可以使程序按预期工作。 – 2013-02-09 20:11:31
对不起。我已经过了2个多小时,我仍然感到困惑。 do-while中的数字总是大于0?那有什么问题? S为什么是零? – Euridice01 2013-02-09 20:32:43
谢谢。其实,我想要反向二进制小数输出,但我可以自己做。非常感谢!! – Euridice01 2013-02-09 22:28:37