2014-09-21 5 views
2

나는 Comparable을 구현하는 User 클래스를 가지고 있습니다. PriorityQueue<User>에 사용자 목록을 추가 한 후에는 scores으로 우선 순위를 지정해야하지만 어떤 이유에서든 그렇지 않습니다. 사용자가 내 Queue에 분류되지 않은 이유를 알아 내도록 도와 주시겠습니까?PriorityQueue 순서가 잘못되었습니다. 자바

업데이트 :

폴링 요소를 통해 큐에 액세스 중입니다. prioritisedUsers.poll() 그것은 항상 순서 존중과 함께 무작위 점수와 함께 제공됩니다.

PriorityQueue<User> prioritisedUsers = userPriorityStrategy.computeUserPriority(users); 

while(!prioritisedUsers.isEmpty()){ 
    System.out.println(prioritisedUsers.poll().getPriorityScore()); 
} 

출력 : 어떤 도움

0.35036433736768735 
0.6619121139678329 
0.09520067929838127 
0.4013591573863 
0.6704568389588227 
0.5989900926939181 
0.7320779721160738 

감사합니다!

public class User implements Comparable<User>{ 

    private long id; 
    private String fistName; 
    private String lastName; 
    private double priorityScore; 

    public User (long id, String firstName, String lastName){ 
     this.id = id; 
     this.fistName = firstName; 
     this.lastName = lastName; 
    } 

    public double getPriorityScore(){ 
     return this.priorityScore; 
    } 

    public void setPriorityScore(double priorityScore){ 
     this.priorityScore = priorityScore; 
    } 

    public long getId(){ 
     return this.id; 
    } 

    public String getFistName(){ 
     return this.fistName; 
    } 

    public String getLastName(){ 
     return this.lastName; 
    } 

    public int compareTo(User o) { 
     return (int) (this.getPriorityScore() - o.getPriorityScore()); 
    } 
} 


    public PriorityQueue<User> computeUserPriority(List<User> users) { 
     PriorityQueue<User> prioritisedUsers = new PriorityQueue<User>(users.size()); 
     for (User user : users) { 
      user.setPriorityScore(rand.nextDouble()); 
      prioritisedUsers.add(user); 
     } 
     return prioritisedUsers; 
    } 
+0

: 내가 잘못 아니에요 경우

, 다른 방법보다 간단하게

public int compareTo(User object) { if (this.getPriorityScore() < object.getPriorityScore()) return -1; if (this.getPriorityScore() == object.getPriorityScore()) return 0; return 1; } 

또는 같은 시도 임의의 점수와 함께 제공됩니다. –

+0

제 잘못, 당신 말이 맞아요. 1 + –

답변

5

캐스팅이 (int) 잘 작동하는지 확신 할 수 없습니다. int로 캐스트하면 암시 적으로 소수가 삭제되기 때문에. 항상`) 나는 (내 IDE에서 쿼리를 평가하는`prioritisedUsers.poll을 실행

public int compareTo(User o) { 
    return Double.compare(this.getPriorityScore(), o.getPriorityScore()); 
} 
+2

예! 1+. 아니면 더 간단하게'return Double.compare (priorityScore, o.priorityScore); ' –

+0

예 ... 더 나은 (+1) ... 더 나은 문제 설명을위한 교훈적인 접근 방식으로 생각하십시오 ... –

+0

't mind.하지만 나는 그것을 당신의 답을 편집하는 것으로 추가했다. –

관련 문제