这是我的代码。我尝试将二进制转换为Char数组,然后将数组中的每个char乘以2到数组中其对应数字的幂,然后将char数组的所有值加总为一个double。编程新手,所以有些困惑。我的输入Binary是txfBinaryInput,我的输出标签是lblDisplay。
private void btnProcessActionPerformed(java.awt.event.ActionEvent evt)
{
if (txfBinaryInput.getText().equals(""))
{
lblDisplay.setText("ERROR: NO INPUT");
} else
{
int n = 0;
int[] binaryValueStorage = new int[100];
double[] decimalValueStorage = new double[100];
String binaryInput = txfBinaryInput.getText();
int binaryNumber = binaryInput.length();
char[] binaryDigits = binaryInput.toCharArray();
for (int i = 0; i >= binaryNumber; i++)
{
binaryValueStorage[n] = binaryDigits[n];
decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, n));
n++;
}
double sum = 0;
for (double a : decimalValueStorage)
{
sum += a;
}
lblDisplay.setText("The Deciaml Value Is " + sum);
}
}
答案 0 :(得分:2)
当心:在for循环条件下,您拥有i >= binaryNumber
而不是i < binaryNumber
,因此您的程序将永远不会进入循环!
另一方面,为什么出于相同的目的(递增和访问数组)使用两个变量i
和n
?
编辑:另一个问题:
在二进制数中,低阶位在右边,但是在数组中,索引是从左到右!
因此,您希望您最右边的数字乘以2 ^ 0,其右下一个数字乘以2 ^ 1,依此类推。
但是在您的代码中,情况恰好相反:它是最左边的数字(您在索引0处的数字)乘以2 ^ 0!
要修复,您可以:
1)反转开始转换之前的binaryDigits
数组,并保持其余代码不变
2)将decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, n));
替换为decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, binaryNumber - n));
希望这会有所帮助!
答案 1 :(得分:0)
好吧,这有很多事情要问您,但这就是我要解决的问题:
public class BinaryToDecimalTest {
private static long binaryToDecimal(String binaryInput)
{
long sum = 0;
for (int i = 0 ; i < binaryInput.length() ; i++) {
sum *= 2;
if (binaryInput.charAt(i) == '1')
sum += 1;
}
return sum;
}
private static void test(String binaryInput) {
long n = binaryToDecimal(binaryInput);
System.out.println(String.format("The Deciaml Value of %s Is %d", binaryInput, n));
}
public static void main(String...args) {
test("0100");
test("1011");
test("1011");
test("10000000");
test("10000000000000000");
}
}
结果:
The Deciaml Value of 0100 Is 4
The Deciaml Value of 1011 Is 11
The Deciaml Value of 1010 Is 10
The Deciaml Value of 10000000 Is 128
The Deciaml Value of 10000000000000000 Is 65536
我不想仅仅打扰您代码,但是鉴于您的代码存在所有问题,我不知道从哪里开始。我希望您看到您经常可以直接解决问题的方式。我很乐意继续与您合作,并解释这里发生的事情。
我正在使用的一个肮脏技巧是每次将整个累加总和乘以2。这使您可以从阵列的前端自然地工作,而不必倒退。第一个数字乘以2(长度-1)倍,第二个数字(长度-2),依此类推,直到最后一个数字,根本不乘。