非常に単純な OS シミュレーターを作成しようとしていますが、ラウンド ロビン アルゴリズムを機能させるのに苦労しています。基本的に私がやろうとしているのは、プロセスのバースト値を格納する循環リンク リストを作成することです。現在、ヌルポインタ例外が発生しています。リンクされたリストを使用してからしばらく経ちましたので、私のコードに耐えてください:
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 スレッド「メイン」での例外 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());
そして今、そのような要素の例外はありません。