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。
答案 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中定义数组的方式