2012-03-21 8 views
0

EDIT:クラスProcessの新しいインスタンスをどこに作成するのかをpで追加しました。 EDIT 2:コンパイル時にエラーが追加されました。優先度キューを使用しようとしていて、コンパレータを理解していません

プロセススケジューリングをシミュレートし、指定された送信時間前にすべてのプロセスを最初に格納する優先度キューを使用しようとしているクラスのプログラムを記述しています。私はnotSubmitted優先順位キューでプロセスの優先順位で優先順位を付けたいと思います。私はコンパレータを使う必要があると思うが、これまでに優先度のキューをプログラムしたことがないとは分かっていない。これは私が以下でやろうとしていることです。誰でも何が間違っているのか、それを修正するために何が必要なのか、誰でも助けてくれますか?

可能な限り追加したい場合は、以下に示すプロセスクラスはありません。

Processクラスの新しいインスタンスを作成します。

static PriorityQueue<Process> notSubmitted = new PriorityQueue<Process>(25, 
      new Comparator<Process>(){ 
        public int compare(Object t1, Object t2) 
        { 
          int process1Time = ((Process)t1).getsubmissionTime(); 
          int process2Time = ((Process)t2).getsubmissionTime(); 

          if(process1Time > process2Time) 
          { 
            return 1; 
          } 
          else if(process1Time < process2Time) 
          { 
            return -1; 
          } 
          else 
          { 
            return 0; 
          } 
        } 

    }); 

      Process[] p = new Process[25]; 

ここにキューを設定します。 (最初は私が定期的にキューを持っていたし、すべてがうまく働いたが、私はプログラムの後半に、それは少し楽にするためにプライオリティキューに変更したい)

for(int j = 0; j < numProcesses; ++j) 
      { 
        pid = i.nextInt(); 
        priority = i.nextInt(); 
        submissionTime = i.nextInt(); 
        totalCpuTime = i.nextInt(); 
        computeTime = i.nextInt(); 
        ioTime = i.nextInt(); 
        p[j] = new Process(pid, priority, submissionTime, totalCpuTime, computeTime, ioTime); 
      } 
      System.out.printf("%d %d %d\n",c.getcpuNum(), c.getnumProcesses(), c.getqSize()); 

      for(int r = 0; r < numProcesses; ++r) 
      { 
        //populate the not submitted queue first 
        notSubmitted.add(p[r]); 
      } 

コンパイルエラー

javac prog2.java 
prog2.java:84: <anonymous prog2$1> is not abstract and does not override abstract method compare(Process,Process) in java.util.Comparator 
        public int compare(Object t1, Object t2) 
          ^
1 error 
+0

なぜあなたのプログラムは機能していないと思いますか?発生しているエラーの説明を追加してください。スタックトレースを使用することをおすすめします。 – Perception

+0

何がうまくいかないのですか?それは間違った順序で出てくるのですか?コンパイルしない? – Thomas

+0

申し訳ありません。私はコンパイラのエラーを追加しています。 – Trance339

答えて

1

あなたcompareメソッドは2つではなくProcess引数をとる必要があります.2つではありません。Object

... 
public int compare(Process p1, Process p2) { 
... 
+0

完璧に作業しました!ありがとう – Trance339

関連する問題