2013-02-14 89 views
0

我使用一個結果採取從一個MySQL數據庫表中的所有信息,並從這裏將所有的值到一個數組Java的比較問題

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 
    } 
+0

你顯然需要三種情況::

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

,如果你考慮的優先順序是這樣這樣的工作'prio1 Danyel 2013-02-14 13:33:35

+0

由於優先級字段是一個int,爲什麼不只是轉換爲Integer對象並使用它的compareTo方法(整數是可比較的)呢? – cjstehno 2013-02-14 13:35:18

+0

你沒有說明你的比較器是如何使用的......第一個代碼塊對於這個問題是毫無價值的。你不顯示'schedulerPriorityQueue.addJob()'是如何實現的。這可能是你的錯誤所在。我們也不知道你是否在其他地方調用任何類型的... – 2013-02-14 13:35:43

回答

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

+0

它排序我的輸出,但它不遵守規則,所以它會去3,3,2,1,2,1,1所以他們是一個輕微的問題,爲什麼它不會去3,3 ,2,2,1,1,? – 2013-02-14 14:53:46

+0

嗯,多數民衆贊成在奇怪的,我添加更多的信息到數據庫,然後它自行排序並訂購它3,2,1任何想法? – 2013-02-14 15:06:14

+0

無論需要比較的項目數量如何,這都應該可以工作。我不明白爲什麼多多少少有所作爲。訂購後唯一可能會改變的是'JobRequest'中的優先級,然後它會在插入後出現順序不正確。 – 2013-02-14 15:57:09

0

只需交換比較方法上的符號即可。這將顛倒順序。

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

您應該從比較器返回0,如果兩個對象相等的整數,小於0,如果對象物1名<對象2,和一個大於0的整數,如果對象物1個>對象2.目前JobQueueComparator從未返回0.請嘗試以下操作:

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

有關更多詳細信息,請參閱Comparator documentation

0

您錯過了優先級相同的情況。我會用這樣的:1,2,3

+0

錯過了一個return語句,我需要在上面的註釋中放置它們的編輯狀態? – 2013-02-14 14:55:49