Thahleel al-Aleem
Thahleel al-Aleem

Reputation: 781

Compiler outputting IndexOutOfBoundsException

ArrayList beds = new ArrayList(49);
public Patient getPatient(int bedNumber) {
    if (beds.get(bedNumber) != null) {
        return (Patient) beds.get(bedNumber);
    } 
    else {
        return null;
    }

}

I'm having a problem where I can't seem to get Java to output null in a method.

Say I assign a patient to an item in the beds ArrayList, then try to get the patient at the 11th bed using the getPatient method created above, however you can't as 11 patients haven't been added. How can I make it output null when I try to do this instead of java.lang.IndexOutOfBoundsException.

Upvotes: 0

Views: 53

Answers (4)

Hamed Moghaddam
Hamed Moghaddam

Reputation: 559

The point here is that your beds List actually has size of zero. So beds.get(i) whatever the i be would throw that exception as it should. I think you are mistaking the way we define array in Java with defining an ArrayList

Upvotes: 0

Makoto
Makoto

Reputation: 106480

While the advice in the other answers is pretty good, one thing that's overlooked is the constructor on your [raw] ArrayList.

new ArrayList(49) will only set the initial capacity of your ArrayList before it has to resize. That doesn't impact how large the array list is at all; if you haven't added any elements into it, its size will still report 0.

Check your bounds; if they enter in a value that's larger than what you support, then reject it.

// The zeroth location in a list is the first element in it.
if(0 <= bedNumber && bedNumber < beds.size()) {
    // Cast necessary since it's a raw ArrayList
    // Totally avoidable if you use ArrayList<Patient>
    return (Patient) beds.get(bedNumber);
} else {
    return null;
}

Upvotes: 0

Greg
Greg

Reputation: 1243

You can just modify the if statement to check the size of the ArrayList.

ArrayList beds = new ArrayList(49);
public Patient getPatient(int bedNumber) {
    if (bedNumber < beds.size()) {
        return (Patient) beds.get(bedNumber);
    } 
    else {
        return null;
    }

}

Upvotes: 1

Hovercraft Full Of Eels
Hovercraft Full Of Eels

Reputation: 285405

First off, the compiler has nothing to do with this as it's the JVM that's showing the IndexOutOfBoundsException.

What you should do is check your bedNumber against the size of the ArrayList, not whether the ArrayList item that doesn't exist (is out of bounds) is null. So do simple int math.

i.e.,

if (bedNumber > 0 && bedNumber < beds.size()) {
    // do your stuff here
} else {
    // myself, I'd throw an exception here, not return null
}

Upvotes: 1

Related Questions