0

外観は次のとおりです。

ここに画像の説明を入力してください

そして、これが私のコードです:

import java.util.*;
import java.io.*;

public class ProcessSchedulingDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("process-schedule.txt");
        Scanner inputFile = new Scanner(file);

        ArrayList<Process> processes = new ArrayList<Process>();

        // Skip past the first line, which is the column headers
        inputFile.nextLine();

        while (inputFile.hasNext()) {
            int processID = Integer.parseInt(inputFile.next());
            int timeUnitsRequired = Integer.parseInt(inputFile.next());
            int priority = Integer.parseInt(inputFile.next());
            int timeOfArrival = Integer.parseInt(inputFile.next());

            // Create and add to process a new process based on the information given
            Process process = new Process(processID, timeUnitsRequired, priority, timeOfArrival);
            processes.add(process);
        }

        Scanner keyboard = new Scanner(System.in);

        System.out.print("How much time does the CPU hold onto each process? ");
        int holdTime = keyboard.nextInt();

        if (holdTime <= 0) {
            while (holdTime <= 0) {
                System.out.print("Value must be greater than 0. Please input new value: ");
                holdTime = keyboard.nextInt();
            }
        }

        Heap<Process> processHeap = new Heap<Process>();

        // Holds a particular process being processed
        Process[] CPU = new Process[1];
        CPU[0] = null;

        int turn = 1;

        int timeSlices = 0;

        do {
            // Check if the list of processes has processes that should be added at the current turn
            for (int i = processes.size() - 1; i >= 0; i--) {
                if (processes.get(i).getTimeOfArrival() == turn) {
                    processHeap.add(processes.remove(i));
                }
            }

            // Print current standing of the processHeap at the beginning of the turn
            processHeap.enumerate();

            // If there currently isn't an item being processed by the CPU
            if (CPU[0] == null) {
                CPU[0] = processHeap.deleteMax();
                timeSlices = holdTime;
                System.out.println("got to cpu setting");
            }

            if (CPU[0].getTimeUnitsRequired() == 0 || timeSlices == 0) {
                if (CPU[0].getTimeUnitsRequired() > 0) {
                    processHeap.add(CPU[0]);
                }

                CPU[0] = null; 
            }
            else {
                CPU[0].setTimeUnitsRequired(CPU[0].getTimeUnitsRequired() - 1);
                timeSlices--;

                if (CPU[0].getTimeUnitsRequired() == 0 || timeSlices == 0) {
                    if (CPU[0].getTimeUnitsRequired() > 0) {
                        processHeap.add(CPU[0]);
                    }

                    CPU[0] = null;
                }
            }

            if (CPU[0] != null) {
                System.out.println("-- STATE OF CPU --");
                System.out.println("[" + CPU[0].getProcessID() + ", " + CPU[0].getTimeUnitsRequired() + ", " + CPU[0].getPriority() + "]\n");
            }

            turn++;
        } while (processes.size() != 0 && processHeap.size() != 0);
    }
}

一体何がそれを引き起こしているのですか?保存するたびにポップアップします。ああ。(Eclipseを使用)

4

2 に答える 2

4

Scannerは、Oracleが提供するJavaランタイムライブラリの一部です(Oracle JDKを使用している場合)。src.zipというファイルとしてJDKに含める必要があると思います。[ルックアップパスの編集]ボタンをクリックして、このファイルを追加できます。JavaJDKインストールディレクトリにあるはずです。

于 2012-11-26T02:49:54.870 に答える
1

Eclipseのデバッグは、プログラムによって実際にロードされたクラスで機能します。

一部のファイルに間違ってインストールしたものがプロジェクトにないため、このエラーが発生します。これはいくつかの理由で発生する可能性がありますが、この動作を示すクラスが見つかった場所を確認してください(ナビゲーションペインで確認してください)。ほとんどの場合、このjarの使用を回避し、代わりにJVMにプロジェクトを使用させるために、プロジェクトのビルドパスを変更する必要があります。

このリンクを使用して問題を解決できます-http ://www.vogella.com/articles/Eclipse/article.html#classpath

JavaとEclipseを更新してください。

于 2012-11-26T12:55:50.153 に答える