我现在就澄清一下,这是大学的作业。我想要能帮助我学习的建议和答案,而不是复制和粘贴。我有一项任务需要模拟医院急诊室。它是练习 ADT 和优先级队列的实现。任务的条件之一是我需要创建一个compareTo方法,我想这将有助于优先考虑进入急诊室的患者,并且它是根据严重程度确定的。如果严重性大于 17,我必须将其替换为 17,如果严重性小于 1,我必须将其替换为 1...我仍然对这个 compreTo 以及两个对象或 int 的比较方式感到困惑:S....根据我在下面写的内容,任何人都可以向我解释如何比较严重性吗?
这只是一个粗略的草稿,只是为了获得一个基本的想法,我将有一个名为患者的对象,我认为它也将有一个名称和条件严重性...
//Comparator Method...
int severity
if (severity > 17) {
replace severity with 17 if (patient severity > other patient severity) { return 1 }
else if(patient severity > other patient severity) { return -1 } else if (patient severity == other patient severity) { return 0 } }
else if (severity < 1) {
replace severity with 17 if (patient severity > other patient severity) { return 1 }
else if(patient severity > other patient severity) { return -1 } else if (patient severity == other patient severity) { return 0 } }
else {
replace severity with 17 if (patient severity > other patient severity) { return 1 }
else if(patient severity > other patient severity) { return -1 } else if (patient severity == other patient severity) { return 0 } }
基本上问题是,您使用什么代码来比较两个对象或属于一个对象的两个整数。如果我在优先级队列中有很多项目需要比较,那么比较器如何工作。感谢您的所有帮助/输入!!!
最佳答案
假设我们有一个带有 int 变量 severity
的类 Patient
。
“如果 int 低于 min,则将其视为 min;如果低于 maxed,则将其视为 max”操作称为钳位。制作一个夹紧辅助函数会很有用,如下所示:
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
中,我们可以通过 ArrayList
'支持' PriorityQueue
,并使用二分搜索对其进行compareTo
来查看我们是否需要查看更高、更低或者是否有匹配项。如果我们有匹配项,那么我们就可以在那里插入。如果我们没有找到匹配项,但我们已将其范围缩小到比下面的元素更严重但小于上面的元素,我们可以将其插入那里。
如果所有插入都保持 PriorityQueue
排序,则最严重的患者始终位于顶部。
关于java - JAVA中优先级队列的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15421794/