0

結果セットを使用してMySQLデータベーステーブルからすべての情報を取得し、すべての値を配列に追加しています

public void populateQueueFromDB() {
        // create priority queue
        try {
            String url = "jdbc:mysql://localhost:3306/project";
            Connection conn = DriverManager.getConnection(url, "root", "nbuser");

            PreparedStatement stmt = conn.prepareStatement("SELECT user_id,s_date,e_date,d_date,department,projectname,projectapplication,priority,cores,disk_space,analysis FROM booking");
            ResultSet rs;
            rs = stmt.executeQuery();


            //List<JobRequest> jobList = new ArrayList<JobRequest>();

            while (rs.next()) {
                JobRequest job = new JobRequest();
                User user = new User();
                user.setUserID(rs.getString("user_id"));
                job.setUserID(user.getUserID()); // changes the /user id to the job.setuser id so can call for my queue print.
                job.setStartDate(rs.getString("s_date"));
                job.setEndDate(rs.getString("e_date"));
                job.setDeadDate(rs.getString("d_date"));
                job.setDepartment(rs.getString("department"));
                job.setProjectName(rs.getString("projectname"));
                job.setProjectApplication(rs.getString("projectapplication"));
                job.setPriority(rs.getInt("priority"));
                job.setCores(rs.getInt("cores"));
                job.setDiskSpace(rs.getInt("disk_space"));
                job.setAnalysis(rs.getString("analysis"));

                schedulerPriorityQueue.addJob( job );

            }
            schedulerPriorityQueue.printQueue();

            conn.close();

        } catch (Exception e) {
            System.err.println("Got an exception! ");
            System.err.println(e.getMessage());
        }

    }

ここから、1、2、3のいずれかの優先度に応じて、コンパレータを呼び出してデータを注文し、キューを並べ替えます。コードの命名などの他のビットですが、本質的にはコンパレータに送られます

public class JobQueueComparator implements Comparator<JobRequest> {

    @Override
    public int compare(JobRequest object1, JobRequest object2) {
        if(object1.getPriority() < object2.getPriority()){
            return 1;
        } else {
            return -1;
        }
    }

}

しかし、コンパレータから得られる出力は、優先度3、1、2の順に並べられています。これをオンラインの例から採用しましたが、これまでに見たコンパレータの例の結果がわかりません。

そのコンパレータを変更して優先順位を並べ替えるにはどうすればよいでしょうか。1が最も重要で、3が最も重要ではありません。すべての結果セットを配列に追加した後、出力を出力していることを確認したので、順序が変更されたため、出力が機能していることがわかりました。希望どおりに順序付けする方法がわかりません。

ありがとう

編集:schedulerPriorityQueue

public class Queue {

    private Comparator<JobRequest> comparator = new JobQueueComparator(); //calls my comparator
    private PriorityQueue< JobRequest> scheduledJobs = new PriorityQueue<JobRequest>(100, comparator);

    public void addJob(JobRequest job) {
        // now add job to priority queue
        scheduledJobs.add(job); // add jobs from the resultset into queue
    }
4

4 に答える 4

2

自分で簡単に使用Integerして、そのcompareTo方法を確認してください。

あなたのコンパレータメソッドは次のようになります

    @Override
public int compare(JobRequest object1, JobRequest object2) {
    Integer iO1 = Integer.valueOf(object1.getPriority());
    Integer iO2 = Integer.valueOf(object2.getPriority());
    return -(i01.compareTo(iO2));
}

またはgetPriorityを返すと仮定します。intString

于 2013-02-14T13:36:53.460 に答える
0

2 つのオブジェクトが等しい場合はコンパレータから 0 を返し、オブジェクト 1 < オブジェクト 2 の場合は 0 未満の整数を返し、オブジェクト 1 > オブジェクト 2 の場合は 0 より大きい整数を返します。現在、JobQueueComparator は 0 を返しません。次を試してください。

public class JobQueueComparator implements Comparator<JobRequest> {
    @Override
    public int compare(JobRequest object1, JobRequest object2) {
        return object1.getPriority() - object2.getPriority();
    }
}

詳細については、コンパレータのドキュメントを参照してください。

于 2013-02-14T13:37:16.500 に答える
0

compare メソッドで符号を交換するだけです。これで順番が逆になります。

public int compare(JobRequest object1, JobRequest object2) {
    if(object1.getPriority() < object2.getPriority()){
        return -1;
    } else {
        return +1;
    }
}
于 2013-02-14T13:37:00.203 に答える
0

優先順位が等しい場合がありません。私は次のようなものを使用します:

public class JobQueueComparator implements Comparator<JobRequest> {

@Override
public int compare(JobRequest object1, JobRequest object2) {
        return -(object1.getPriority() - object2.getPriority());
 }
}

これは、1、2、3 のような優先順位を考慮するとうまくいきます。

于 2013-02-14T13:40:02.467 に答える