DiVeRsi0n
DiVeRsi0n

Reputation: 51

Moving elements in an array

I have an array of objects and i want to add elements in this array and simultaneously sort them in ascending order.Although I tried many compinations , I always take a java.lang.ArrayIndexOutOfBoundsException. Here is a part of my code :

public boolean insert(Person p)
{
    for(int i=0;i<=size();i++)
    {   
        if (c==0)
        {   
            array[0] = p;
            c++;
            return true;
        }
        else
        {   
            if (p.compareTo(array[i])==-1)
            {
                array[i]=p;
                c++;
                for(int j = size(); j>i; j--)
                {
                    array[j]=array[j-1];
                }
            }
            else if((p.compareTo(array[i])==1))
            {
                array[i+1]=p;
                c++;
                for (int j=(size()-1);j>= i+1; j--)
                {
                    array[j+1]=array[j];
                }
            }
            else
            {
                return false;
            }
            return true;
        }
    }
    return false;
}

private int c;
private Person array[];
public SortedPersonList()
{   
    this.array = new Person[c];
}
public int size()
    {
        return c;
    }

Upvotes: 0

Views: 128

Answers (3)

Eyal Schneider
Eyal Schneider

Reputation: 22456

1) You are initializing your array to a size 0, and you never resize it. An array has a fixed size, so in order to populate it with items beyond its range, you should first create a larger array and copy the contents to it (This is how ArrayList works).

2) When you find the insertion point, you shouldn't override this position before keeping its value in a temp variable. (Also, I don't understand the third case in your code. Why do you insert if p is greater than array[i]? you should rethink your logic.)

3) you may want to use binary search to find the insertion point. It has a better performance than linear search.

Upvotes: 0

Benjamin
Benjamin

Reputation: 2296

Your code :

    for(int i=0;i<=size();i++)

Write like

    for(int i=0;i<size();i++)  or  for(int i=0;i<=size()-1;i++)

Upvotes: 0

HelloWorld123456789
HelloWorld123456789

Reputation: 5369

Remove the equal sign in for(int i=0;i<=size();i++). That is, change to

for(int i=0;i<size();i++)

Array indices go from 0 to size-1. So array[size()] is outside the array. Hence the error.

Upvotes: 1

Related Questions