2013-02-14 4 views
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; 
     } 
    } 

} 

하지만 비교기에서지고있어 출력에 나를 보낸다 1 다음 2. 예에서이 적응 한, 우선 순위 3에 주문한다 온라인으로 보았지만 필자는 본 비교기 예제에 대한 수익을 이해하지 못합니다.

내 우선 순위를 정렬하려면 어떻게 비교기를 변경할 수 있습니까? 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

+0

우선 순위 필드가 int이므로 Integer 객체로 캐스팅하지 않고 compareTo 메소드 (Integer is Comparable)를 사용하는 것이 가장 좋은 이유는 무엇입니까? – cjstehno

+0

당신은 당신의 콤퍼레이터가 어떻게 사용되는지를 보여주지 않습니다. 첫 번째 코드 블록은 질문의 문제로는 전혀 쓸모가 없습니다. 'schedulerPriorityQueue.addJob()'이 구현 된 방법을 보여주지는 않습니다. 아마 당신의 실수가있는 곳일 것입니다. 우리는 다른 어떤 곳에서 어떤 종류의 호출이라도 알지 못합니다 ... –

답변

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 반환 int 또는 String과 같을 것이다.

+0

내 출력을 정렬하지만 규칙을 지키지 않아 3,3,2,1,2,1,1이 될 것이므로 약간의 문제가있을 것입니다. , 2,2,1,1, –

+0

흠 그 이상한, 나는 데이터베이스에 더 많은 정보를 추가하고 그것을 자기 정렬하고 3,2,1 어떤 생각을 주문합니까? –

+0

이 값은 비교할 항목 수에 관계없이 작동해야합니다. 나는 왜 더 많거나 적은 것이 차이를 만드는 지 보지 못합니다. 주문 후에 변경 될 수있는 유일한 것은'JobRequest' 내의 우선 순위입니다. 그러면 JobRequest가 삽입 후 순서가 올바르지 않기 때문에 나타납니다. –

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 결코 다음을 시도하십시오.

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 문이 누락되었습니다. 위의 주석에 편집 된 내용을 넣으려면 어떻게해야합니까? –