Я пытаюсь написать очень простой симулятор ОС, и я застрял в работе алгоритма циклического перебора. В основном то, что я пытаюсь сделать, это создать круговой связанный список, в котором хранятся пакетные значения процесса. Прямо сейчас я получаю исключение нулевого указателя. Прошло некоторое время с тех пор, как я использовал связанный список, поэтому несите мой код:
public static void RR3(int numProcess, int[] cpuBurst, int[] arrivalTime){
int quantum = 3,time = 0, temp;
int completionTime = 0;
LinkedList <Integer>process = new LinkedList();
for (int i = 0; i < numProcess; i++) {
process.add(i, cpuBurst[i]);
}
while (process.isEmpty() != true){
for (int j = 0; j < quantum; j++) {
System.out.println(process.getFirst());
if(process.peek() == 0 ){
completionTime = completionTime + time;
process.remove();
}
else{
temp = process.pop();
process.push(temp - 1);
time++;
}
}
process.addLast(process.getFirst());
process.removeFirst();
}
double act = (double) completionTime/numProcess;
System.out.println("-----------------RR3-----------------");
System.out.println(" Act = " + act + "ms");
}
Правильно ли я использую связанный список? Любая помощь приветствуется. редактировать: я вставил System.out.println(process.getFirst()); после первого цикла for получить какую-то трассировку стека, и это мой вывод:
6 5 4 4 3 2 10 9 8 7 6 5 3 2 1 7 6 5 Исключение в потоке "main" java.util.NoSuchElementException 4 3 2 1 4 3 1 в java.util.LinkedList.getFirst(LinkedList.java:242 ) 2 1 в OsSimulator.RR3(OsSimulator.java:61) в OsSimulator.main(OsSimulator.java:79) Результат Java: 1
мое время взрыва, которое я ввел, было 6,4,10,7, так что похоже, что оно на правильном пути, но я получаю сообщение об ошибке с этой строкой
process.addLast(process.getFirst());
и теперь это исключение такого элемента.