3 回答
TA贡献1864条经验 获得超2个赞
在执行之前添加一个空列表检查Queue.add(Arriving.get(0));
。
那应该可以解决问题。
仅当 List 中存在某些内容时,才应该执行 get() 或 remove() 操作。
TA贡献1880条经验 获得超4个赞
在 main 方法的代码中,您初始化,并向其中queue添加 的实例。Process
ArrayList<Process> queue = new ArrayList<Process>();
queue.add(a);
queue.add(b);
queue.add(c);
queue.add(d);
queue.add(e);
Scheduler run = new Scheduler(queue);
queue被传递到 的构造函数中Scheduler,只是再次初始化,从而删除了Process之前在其中的所有实例。
public Scheduler(ArrayList<Process> Queue) {
Arriving = new ArrayList<Process>();
Queue = new ArrayList<Process>(); // Change this line to this.Queue = Queue
for (int i = 0; i<Queue.size(); i++) {
Arriving.add(Queue.get(i));
}
Sort();
currentTime = 0;
}
因此,当您尝试循环构造函数中的所有对象时,Queue.size()将返回 0。
您ArrayList<Process> Queue作为该类的成员,尽管该名称反映了传递Queue到Scheduler.
您可以简单地设置,而不是循环遍历并将Queue所有对象添加到。ArrivingArriving = Queue
TA贡献1876条经验 获得超5个赞
您正在使用 ArrayList 作为队列。myList.isEmpty()
在访问元素之前应该检查空队列的测试。
或者,您可以使用,当您使用或java.util.Deque
查看空双端队列的头部或尾部时,它会返回 null 。peekFirst()
peekLast()
添加回答
举报