Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"ArrayIndexOutOfBoundsException" error when trying to add two int arrays

Tags:

java

arrays

I'm trying to make an implementation of 'adding' the elements of two arrays in Java. I have two arrays which contain integers and i wanna add them. I dont want to use immutable variables. I prefer do sth like that : a.plus(b); The problem is when i add 2 arrays with different length.It tries to add the elements of b to a, but if b has a bigger length it flags an error "ArrayIndexOutOfBoundsException". I can understand why that's happening. But how can i solve this? How can i expand array a? :/

public void plus(int[] b)
    {

        int maxlength = Math.max( this.length, b.length );

        if (maxlength==a.length)
        {
            for (int i = 0; i <= maxlength; i++)
            {
                a[i] = a[i] + b[i];   //ArrayIndexOutOfBoundsException error
            }
        }
    }
like image 988
FILIaS Avatar asked Dec 05 '22 00:12

FILIaS


1 Answers

i <= maxlength replace this with i < maxlength.

Your array index is starting at zero, not at one. So the length of the array is one less than the end index of the array. When you use <= you are trying to go one element after the last element in your array, Hence the exception.

Also you got to check the length of array b. If length of array b is smaller than a, you will end up facing the same exception.

int maxlength = Math.min( this.length, b.length ); is more appropriate.

Or incase if you don't want to miss out any elements in either of the arrays while adding, ArrayList is the answer for you. ArrayList is the self expanding array you are looking for. Here is how you can do that -

    // First ArrayList
    ArrayList<Integer> a = new ArrayList<Integer>();
    a.add(1);
    a.add(2);
    a.add(3);

    // Second ArrayList
    ArrayList<Integer> b = new ArrayList<Integer>();
    b.add(1);
    b.add(2);
    b.add(3);
    b.add(4);

    int maxlength = Math.max(a.size(), b.size());
    // Add the elements and put them in the first ArrayList in the corresponding 
    // position
    for (int i = 0; i < maxlength; i++) {
        if (i < a.size()) {
            if (i < b.size()) {
                int j = a.get(i);                   
                a.set(i, j + b.get(i));
            }
        } else {
            a.add(i, b.get(i));
        }
    }

    for (int j : a) {
        System.out.println(j);
    }
like image 145
Johnbabu Koppolu Avatar answered Dec 07 '22 13:12

Johnbabu Koppolu