编译器输出IndexOutOfBoundsException

时间:2014-12-03 02:54:38

标签: java

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

}

我遇到了一个问题,我似乎无法让Java在方法中输出null。

假设我将患者分配到床ArrayList中的项目,然后尝试使用上面创建的getPatient方法将患者送到第11张床,但是您不能添加11名患者。当我尝试执行此操作而不是java.lang.IndexOutOfBoundsException时,如何使其输出null。

4 个答案:

答案 0 :(得分:1)

首先,编译器与此无关,因为它是显示IndexOutOfBoundsException的JVM。

你应该做的是检查你的bedNumber与ArrayList的大小,而不是不存在的ArrayList项(超出界限)是否为空。所以做简单的数学运算。

即,

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

答案 1 :(得分:1)

您只需修改if语句即可检查ArrayList的大小。

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

}

答案 2 :(得分:0)

虽然其他答案中的建议非常好,但忽略的一件事是[raw] ArrayList上的构造函数。

new ArrayList(49)只有ArrayList的{​​{3}}才能调整大小。这不会影响数组列表 large 的方式;如果您尚未在其中添加任何元素,则其大小仍会报告0

检查你的界限;如果他们输入的值大于你支持的值,则拒绝它。

// 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;
}

答案 3 :(得分:0)

这里的要点是你的床名单的实际大小为零。所以bed.get(i)无论我是什么都会抛出那个例外。我认为你错误地定义了一个ArrayList

在Java中定义数组的方式