2013-03-14 132 views
1

我现在要说清楚这是用于大学的任务。我想咨询和答案,这将帮助我学习,而不是复制和粘贴。我有一项任务需要模拟医院ER。这是练习ADT和实施优先级队列。这项任务的一个条件说明,我需要创建一个compareTo方法,我将根据严重性情况确定帮助患者进入急诊室的优先级。如果严重性大于17,我必须用17替换它,如果严重性小于1,我必须将其替换为...我仍然对这个compreTo以及两个对象或int的比较方式感到困惑:S ....根据我在下面写的内容,任何人都可以向我解释如何比较严重性?比较JAVA中的优先级队列

这只是粗粗草稿只是为了获得一个基本的想法,我将有一个对象调用病人,我认为也将有一个名字和病情的严重性......

//比较法。 ..

INT严重性

如果(严重性> 17){

17如果(患者严重性>其它患者 严重性)替换严重性{返回1}

否则如果(患者严重性>其他患者严重程度){返回-1} 否则如果(患者严重性==其它患者的严重程度){返回0} }

否则如果(严重性< 1) {

17如果(患者严重性>其它患者 严重性){返回1}

否则如果(患者严重性>其它患者严重性)替换严重性{返回-1} 否则如果(患者严重程度==其他患者的严重程度){返回0} }

否则{

用17替换严重性如果(患者严重性>其它患者 严重性){返回1}

否则如果(患者严重性>其他患者严重程度){返回-1} 否则,如果(患者严重==其他患者严重){返回0}}

主要的问题是,你使用什么COMPA代码属于一个对象的两个对象或两个整数。如果比较优先级队列中有很多项目,则比较器如何工作?感谢所有帮助/输入!

回答

1

比方说,我们有一个类Patient与int变量severity

如果int小于min且小于max,则将int视为min,称为clamp。它可以使一个夹紧助手功能非常有用,比如:

public static int clamp(int value, int min, int max) 
{ 
    return value < min ? min : value > max ? max : value; 
} 

public int compareTo(Parent other) 
{ 
    int clampedSeverity = clamp(this.severity, 1, 17); 
    int clampedOtherSeverity = clamp(this.severity, 1, 17); 
    //do comparisons 
} 

现在,做一个PriorityQueue - 一个PriorityQueue的语义是这是在任何插入自动排序的集合,使得最高对比元素(在这种情况下,最高严重性)是在开始。

所以要插入到PriorityQueue,我们可以有PriorityQueue“后盾”的说,一个ArrayList和二进制搜索到它使用compareTo,看看我们是否需要看更高,更低或者如果我们有一个匹配。如果我们有一场比赛,那么我们可以在那里插入。如果我们没有找到匹配,但我们已经缩小到比下面的元素更严格但比上面的元素更少,我们可以将其插入。

如果所有的插入物都保持PriorityQueue的排序,那么最严重的患者总是在最上面。

1

您应该首先编写一个方法,将原始严重性转换为“规范化”严重性(即严重性介于1和17之间)。然后你应该比较患者的归一化色度:

private int normalizedSeverity(int severity) { 
    if (severity < 1) { 
     return 1; 
    } 
    if (severity > 17) { 
     return 17; 
    } 
    return severity; 
} 

public int compare(Patient p1, Patient p2) { 
    int severity1 = normalizedSeverity(p1.getSeverity()); 
    int severity2 = normalizedSeverity(p2.getSeverity()); 
    return Integer.compare(severity1, severity2); 
} 
+0

感谢您的贡献 – choloboy7 2013-03-15 14:27:12