在Java中这种二进制加法算法的简单应用有什么问题?

时间:2017-04-17 06:46:55

标签: java algorithm

我试图在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]+"");
   }
  }

4 个答案:

答案 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将执行整数除法,它只会忽略在常规除法中小数点后发生的任何事情。