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。感谢您的帮助!
在我看来就像你有你的compareTo倒退。虽然没有读过你所有的代码。 – user2357112
'Time.plus'方法似乎与实例自己的“小时”相混淆,而不是新时间的“小时”。 – user2357112
'Time.totalMinutes'也似乎在搞乱'hour'实例字段时,它真的不应该。 – user2357112