我试图在Java中应用一个简单的二进制加法算法,但我反复得到错误。有谁可以帮助我。谢谢!
public class BasicBinaryAddition {
public static void main(String[] args)
{
int []sum = new int [3];
int []a = {0,1,0};
int []b = {1,1,0};
int carry =0;
int bitIndex;
for (bitIndex =0; bitIndex < a.length; bitIndex++)
{
int bitSum = a[bitIndex] + b[bitIndex] + carry;
sum[bitIndex] = bitSum%2;
double d = bitSum/2;
carry = (int) Math.floor(d);
}
sum[bitIndex] = carry;
for (int i = 0 ; i <= sum.length-1; i++)
System.out.print(sum[I]+"");
}
}
答案 0 :(得分:1)
您的sum
数组太短,无法保存完整结果。使其长度为4,这将避免ArrayIndexOutOfBoundsException
。
计算进位的方式也可简化为
carry = bitSum / 2;
这是一个整数除法,产生一个整数结果。
答案 1 :(得分:0)
添加两个3位数可能会导致4位。所以,你应该声明
int []sum = new int [4];
此外,您应该在上一个i
- 循环
for
System.out.print(sum[i]+"");
答案 2 :(得分:0)
你应该把(sum [bitIndex] = carry)放在循环中;
public class BasicBinaryAddition {
public static void main(String[] args)
{
int []sum = new int [3];
int []a = {0,1,0};
int []b = {1,1,0};
int carry =0;
int bitIndex;
for (bitIndex =0; bitIndex < a.length-1; bitIndex++)
{
int bitSum = a[bitIndex] + b[bitIndex] + carry;
sum[bitIndex] = bitSum%2;
double d = bitSum/2;
carry = (int) Math.floor(d);
sum[bitIndex] = carry;
}
for (int i = 0 ; i <= sum.length-1; i++)
System.out.print(sum[I]+"");
}
}
答案 3 :(得分:0)
这看起来像是作业,所以我会指出你正确的方向。
第一个问题出在您的行中:
System.out.print(sum[I]+"");
你正在使用&#34;我&#34;而不是&#34;我&#34;所以编译器很不高兴它找不到变量&#34; I&#34;。
第二个问题是你有溢出问题。如果添加2个长度为3的二进制数,则可以得到4位长的答案。
101 + 100 = 1001
执行行时:sum [bitIndex] =进位,位索引等于3,表示数组求和的第4项(记住Java数组从索引0开始)。但是,sum被声明为长度为3,因此Java的头部爆炸,你试图访问一个超出界限的数组元素。这个问题的答案是将sum声明为长度为4.
可以清理的另一件事是:
double d = bitSum/2;
carry = (int) Math.floor(d);
这可以简化为:
carry = bitSum/2;
这是因为carry和bitSum都是整数,所以Java将执行整数除法,它只会忽略在常规除法中小数点后发生的任何事情。