我正在尝试编写一个非常简单的操作系统模拟器,但我无法让我的循环算法工作。基本上我要做的是创建一个循环链表来存储进程的突发值。现在我得到一个空指针异常。自从我使用链表以来已经有一段时间了,所以请耐心等待我的代码:
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());
现在它没有这样的元素例外。