Java中这种简单的二进制加法算法应用有什么问题?
我试图在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
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
-循环中使用smalli
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;)只执行一次。也就是说,最后一个进位值将存储在数组的最后一个位置。谢谢!不,这不是家庭作业。我正在进行某种形式的自学,以了解算法。非常感谢你宝贵的信息性评论。