【问题标题】:Binary Addition using Java [duplicate]使用Java的二进制加法[重复]
【发布时间】:2016-12-22 14:08:39
【问题描述】:

我必须对二进制数求和,我正在使用反向循环,就像我们实际上使用笔和纸求和一样。所以有一个硬编码的两个整数数组,我将其长度设为相等以避免任何差异。我正在检查总和和进位值是否匹配,然后输出应该是 so & so 否则 so & so。检查下面的代码。

我的问题是为什么我在运行 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); 
        } 
    }
}

【问题讨论】:

  • i-1 carry += a[i-1] + b[i-1]; 中 i 为 0 时
  • 在您的if(carry ==1) 中有i-1。当 i=0 这将是 att index -1 -> 超出范围
  • 你怎么看这两个代码相似。那是一个有序的循环。我正在使用反向循环。
  • 代码不相似,但使用链接问题的答案,您会找到解决问题的方法
  • 问题不在于代码的类型,但问题是一样的。越界就是越界,不管代码是什么,解决方案也是一样的——保持在界限内

标签: java binary addition


【解决方案1】:
carry += a[i-1] + b[i-1];

如果 i 为 0,那么您将得到索引 -1。

【讨论】:

  • 谢谢,我会添加中断并尝试进一步解决..
【解决方案2】:
 if(carry == 1)
    {
        carry += a[i-1] + b[i-1];
        output = carry;
    }

这是导致数组越界异常的部分。因为对于 i=0,进位将包含 a[-1]+b[-1],它们当然是 out有界(0 和 10 为界)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多