真的需要帮助,因为患者没有设置替换null。我们必须创建一个包含50个空值的arraylist,因此迭代器会遍历列表,如果找到null,它会将其设置为患者。问题是没有患者被设置为null。我们也必须在最后返还床号。
protected int amountOfBeds = 50;
ArrayList<Patient> bedList = new ArrayList<Patient>(amountOfBeds);
public int admitPatient(Patient illPatient) {
int index = -1;
if(illPatient.getAge() > 0 && amountOfBeds > size()) {
//if it is null then set to patient
//if it not null then we assume its a patient so we skip
Iterator<Patient> itr = bedList.iterator();
try{
while(itr.hasNext()) {
int bedIndex = bedList.indexOf(itr.next());
if(bedList.get(bedIndex).equals(null)) {
bedList.set(bedIndex, illPatient);
index = bedIndex +1;
break;
}
}
}catch(NullPointerException e) {
e.getMessage();
}
}
return index;
}
答案 0 :(得分:2)
创建50个空值列表的简单方法是
List<Patient> list = Collections.nCopies(50, null);
找到null索引的快速方法就是这个
int i = list.indexOf(null);
答案 1 :(得分:0)
在Java中,ArrayList
基本上是一个数组,可以在执行期间更改其大小。既然你似乎有固定的床,那么阵列可能会更好。
构造函数new ArrayList(50)
不会创建包含50个元素的ArrayList。它创建一个空的ArrayList,但给Java提供了#34;提示,可能会在ArrayList中插入50个元素。如果你没有提供这样的提示,那么ArrayList会以很小的空间开始,并且会定期变大,如果它太小则太容纳你要插入的所有项目。这需要时间,所以如果你已经知道要插入的项目数量(即使你只知道它大致),这个构造函数会使你的代码更快。
但是,您必须考虑是否真的需要按照您想要的方式执行此操作。只要有一个空的ArrayList就可以了,你可以根据需要添加或删除元素(没有复杂的逻辑,用一个元素替换null
。你可以只是添加if (array.size() >= 50) // it is full, so some special case may be needed here
以确保数组中的元素永远不会超出您想要的范围。