2014-03-06 66 views
0

我有一个Event类,它使用PriorityQueue和一个Time类,我定义我自己用于Event类。Java PriorityQueue无法正常工作?

static class Event implements Comparable<Event>{ 
    Customer customer; 
    Time eventTime; 
    char eventType; 

    public int compareTo(Event e){ 
     int n = e.eventTime.compareTo(eventTime); 
     int compare = 0; 

     if(n < 0){ 
      compare = -1; 
     } 
     else if(n == 0){ 
      compare = 0; 
     } 
     else if(n > 0){ 
      compare = 1; 
     } 
     return compare; 
    } 
} 


class Time{ 
    private int hour; 
    private int minute; 
    private boolean isMorning; 

    public Time(){ 
     hour = 0; 
     minute = 0; 
     isMorning = true; 
    } 

    public Time(int h, int m, boolean morning){ 
     hour = h; 
     minute = m; 
     isMorning = morning; 
    } 

    public void setTime(int h, int m, boolean morning){ 
     hour = h; 
     minute = m; 
     isMorning = morning; 
    } 

    public int getHour(){ 
     return hour; 
    } 

    public int getMinute(){ 
     return minute; 
    } 

    public boolean isAM(){ 
     return isMorning; 
    } 

    public String toString(){ 
     String AM = ""; 
     String min = ""; 
     if(minute < 10){ 
      min = ("0" + minute); 
     } 
     else{ 
      min = ("" + minute); 
     } 
     if(isMorning){ 
      AM = "AM"; 
     } 
     else{ 
      AM = "PM"; 
     } 
     return ("" + hour + ":" + min + " " + AM); 
    } 


    public Time plus(int n){ 
     Time newTime = new Time(); 
     boolean newMorning = false; 
     int minutes = minute + n; 
     int newHour = minutes/60; 
     int newMinutes = minutes%60; 
     hour = hour + newHour; 
     if(hour > 12){ 
      hour = hour - 12; 
      if(isMorning){ 
       newMorning = false; 
      } 
      else{ 
       newMorning = true; 
      } 
     } 
     newTime.setTime(hour, newMinutes, newMorning); 
     return newTime; 

    } 

    public int timeDifference(Time t){ 

     int n = totalMinutes(); 
     int m = t.totalMinutes(); 

     return m - n; 

    } 

    public int compareTo(Time t){ 
     int n = totalMinutes(); 
     int m = t.totalMinutes(); 
     int compare = 0; 

     if(n < m){ 
      compare = -1; 
     } 
     else if(n == m){ 
      compare = 0; 
     } 
     else if(n > m){ 
      compare = 1; 
     } 
     return compare; 
    } 

    private int totalMinutes(){ 
     int tempMinute = 0; 
     if(!isMorning){ 
      if(hour == 12){ 

      } 
      else{ 
      hour = hour + 12; 
      tempMinute = (hour*60) + minute; 
      } 
     } 
     else{ 
      if(hour == 12){ 
       tempMinute = minute; 
      } 
      else{ 
       tempMinute = (hour*60) + minute; 
      } 
     } 
     return tempMinute; 
    } 

} 

这不是我所有的代码,因为我有其他人只保存稍后将插入到事件队列中的值。当我检查Event队列之外的时间时,它与它应该的时间相匹配,比如说我在上午11:22有一个Time对象,但是当我将它插入事件队列时,我的时间变为23:22 AM。出于某种原因,它在事件队列中增加了12个小时,我不明白为什么。


想通了()方法用的时间,因为搞乱使用时的compareTo()或为TimeDifference()隐式地它被称为totalMinutes。感谢您的帮助!


+0

在我看来就像你有你的compareTo倒退。虽然没有读过你所有的代码。 – user2357112

+0

'Time.plus'方法似乎与实例自己的“小时”相混淆,而不是新时间的“小时”。 – user2357112

+0

'Time.totalMinutes'也似乎在搞乱'hour'实例字段时,它真的不应该。 – user2357112

回答

0

首先,totalMinutes()混乱与hour场时,它不应该。它应该使用局部变量。

其次,你的整个Event.compareTo(Event e)方法可以降低到

return e.eventTime.compareTo(eventTime); 

这是后到前,除非你想先最近倍。尝试

return eventTime.compareTo(e.eventTime);