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()
添加回答
舉報