Java中非常大的数字 - 长期添加

时间:2013-01-12 11:19:03

标签: java try-catch addition

我正在编写一个程序,用于添加大数字但不使用BigInteger。我有一个长期添加的问题。

int l = this.arr.length > arg.arr.length ? this.arr.length : arg.arr.length;        
byte[] result = new byte[l];    
byte carry = 0;

for(int i = 0; i < result.length; i++){
        byte sum;

        try{
            sum = (byte) (this.arr[i] + arg.arr[i] + carry);
        }
        catch(ArrayIndexOutOfBoundsException e){
            try{
                sum = (byte) (this.arr[i] + carry);
            }
            catch(ArrayIndexOutOfBoundsException ex){
                sum = (byte) (arg.arr[i] + carry);
            }
        }

        //carry
        if(sum > 9){
            result[i] = (byte) (sum % 10);
            carry = 1;
        }
        else{
            result[i] = sum;
            carry = 0;
        }
}

if(carry > 0){
        byte[] tmp = new byte[l+1];
        System.arraycopy(result, 0, tmp, 0, l);
        tmp[tmp.length - 1] = carry;
        result = tmp;
}

所以要添加两个数字,我正在使用try-catch两次来检查是否有任何数组中的任何数字。该方法工作正常,但这个try-catch事情看起来不那么好。我可以用其他方式做到这一点吗?

3 个答案:

答案 0 :(得分:3)

使用if语句检查i< this.arr.length

答案 1 :(得分:1)

是的,有一种方法,你应该使用它而不是try-catch块。要检查IndexOutOfBounds,只需检查索引是否超出范围,即它是否小于或等于数组大小。尝试捕获这样的检查肯定不是一个好主意。

由于在特定的try-catch中有两个索引操作,因此必须分别检查数组大小。

答案 2 :(得分:1)

当然你需要按如下方式重写:

    if(i < this.arr.length && i < arg.arr.length)
        sum = (byte) (this.arr[i] + arg.arr[i] + carry);
    else if(i < this.arr.length)
        sum = (byte) (this.arr[i] + carry);
    else
        sum = (byte) (arg.arr[i] + carry);

BTW,如果在循环结束后carry中有值,则您的方法将无法正常工作,您还需要将此值附加到结果数组。