使用 Java 的二进制加法
Binary Addition using Java
我必须对二进制数求和,我使用的是反向循环,就像我们实际使用笔和纸求和一样。所以有两个整数的硬编码数组,为了避免任何差异,我已经使它们的长度相等。我正在检查总和和进位值是否匹配然后输出应该如此 & 所以否则如此 & 所以。检查下面的代码。
我的问题是为什么我在 运行 上出现关于 Array Index Out of Bounds -1
的错误,即使在编译成功之后。
public class binary{
static int sum, carry;
static int output = 0;
public static void main(String args[])
{
int[] a = {1,1,0,1,1,0,0,1,0,0,1};
int[] b = {1,0,0,0,0,0,0,0,1,0,1};
for(int i = 10; i >= 0; i--)
{
if(a[i] == 0 && b[i] == 0)
{
sum = 0;
carry = 0;
}
if(a[i] == 0 && b[i] == 1)
{
sum = 1;
carry = 0;
}
if(a[i] == 1 && b[i] == 0)
{
sum = 1;
carry = 0;
}
if(a[i] == 1 && b[i] == 1)
{
sum = 0;
carry = 1;
}
if(carry == 1)
{
carry += a[i-1] + b[i-1];
output = carry;
}
else
{
output += a[i] + b[i];
output = sum;
}
System.out.print(output);
}
}
}
if(carry == 1)
{
carry += a[i-1] + b[i-1];
output = carry;
}
这是导致数组越界异常的部分。因为对于 i=0,进位将包含 a[-1]+b[-1]这当然是越界的(0 和 10 是边界)
carry += a[i-1] + b[i-1];
如果 i 是 0 那么你将得到索引 -1。
我必须对二进制数求和,我使用的是反向循环,就像我们实际使用笔和纸求和一样。所以有两个整数的硬编码数组,为了避免任何差异,我已经使它们的长度相等。我正在检查总和和进位值是否匹配然后输出应该如此 & 所以否则如此 & 所以。检查下面的代码。
我的问题是为什么我在 运行 上出现关于 Array Index Out of Bounds -1
的错误,即使在编译成功之后。
public class binary{
static int sum, carry;
static int output = 0;
public static void main(String args[])
{
int[] a = {1,1,0,1,1,0,0,1,0,0,1};
int[] b = {1,0,0,0,0,0,0,0,1,0,1};
for(int i = 10; i >= 0; i--)
{
if(a[i] == 0 && b[i] == 0)
{
sum = 0;
carry = 0;
}
if(a[i] == 0 && b[i] == 1)
{
sum = 1;
carry = 0;
}
if(a[i] == 1 && b[i] == 0)
{
sum = 1;
carry = 0;
}
if(a[i] == 1 && b[i] == 1)
{
sum = 0;
carry = 1;
}
if(carry == 1)
{
carry += a[i-1] + b[i-1];
output = carry;
}
else
{
output += a[i] + b[i];
output = sum;
}
System.out.print(output);
}
}
}
if(carry == 1)
{
carry += a[i-1] + b[i-1];
output = carry;
}
这是导致数组越界异常的部分。因为对于 i=0,进位将包含 a[-1]+b[-1]这当然是越界的(0 和 10 是边界)
carry += a[i-1] + b[i-1];
如果 i 是 0 那么你将得到索引 -1。