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

Java中这种简单的二进制加法算法应用有什么问题?,java,algorithm,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.len

我试图在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]+"");
   }
  }
公共类基本二进制添加{
公共静态void main(字符串[]args)
{
int[]和=新的int[3];
int[]a={0,1,0};
int[]b={1,1,0};
整数进位=0;
int bitIndex;
对于(bitIndex=0;bitIndex对于(inti=0;i,添加两个3位数字可能会产生4位

int []sum = new int [4];
另外,您应该在最后一个
for
-循环中使用small
i

System.out.print(sum[i]+"");

您的
sum
数组太短,无法容纳完整的结果。将其长度设为4,这将避免
ArrayIndexOutOfBoundsException

计算进位的方法也可以简化为

carry = bitSum / 2;
这是一个整数除法,产生一个整数结果。

您应该将(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]+"");
   }
  }
公共类基本二进制添加{
公共静态void main(字符串[]args)
{
int[]和=新的int[3];
int[]a={0,1,0};
int[]b={1,1,0};
整数进位=0;
int bitIndex;
对于(bitIndex=0;bitIndex对于(inti=0;i这看起来像是家庭作业,所以我将为您指出正确的方向

第一个问题在您的产品线中:

   System.out.print(sum[I]+""); 
您使用的是“I”而不是“I”,因此编译器会因为找不到变量“I”而感到不安

第二个问题是溢出问题。如果添加2个长度为3的二进制数,则可能得到4位长的答案

   101 + 100 = 1001
当执行行:sum[bitIndex]=carry时,位索引等于3,这意味着数组和的第四项(记住Java数组从索引0开始)。但是,sum被声明为长度为3,因此Java的头在愤怒中爆炸,因为您试图访问超出边界的数组元素。这个问题的答案是将sum声明为长度为4

另一件可以清理的事情是线路:

double d = bitSum/2;   
carry = (int) Math.floor(d);
这可以简化为:

carry = bitSum/2; 

这是因为进位和位和都是整数,所以Java将执行整数除法,它只会忽略在正则除法中小数点后发生的任何事情。

您得到了什么错误?将其添加到问题中…我相信这是ArrayIndexOutOfBoundsException。现在,它工作正常。谢谢!谢谢您的回答。我不是你说的没错。我希望(sum[bitIndex]=carry;)只执行一次。也就是说,最后一个进位值将存储在数组的最后一个位置。谢谢!不,这不是家庭作业。我正在进行某种形式的自学,以了解算法。非常感谢你宝贵的信息性评论。