1

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

这只是一个粗略的草稿,只是为了得到一个基本的想法,我将有一个名为患者的对象,我假设它也会有一个名称和条件严重性......

//比较器方法...

严重性

如果(严重程度 > 17){

用 17 替换严重性 if (患者严重性 > 其他患者严重性) { return 1 }

else if(患者严重程度 > 其他患者严重程度) { return -1 } else if (患者严重程度 == 其他患者严重程度) { return 0 } }

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

用 17 替换严重性 if (患者严重性 > 其他患者严重性) { return 1 }

else if(患者严重程度 > 其他患者严重程度) { return -1 } else if (患者严重程度 == 其他患者严重程度) { return 0 } }

别的 {

用 17 替换严重性 if (患者严重性 > 其他患者严重性) { return 1 }

else if(患者严重程度 > 其他患者严重程度) { return -1 } else if (患者严重程度 == 其他患者严重程度) { return 0 } }

基本上问题是,您使用什么代码来比较两个对象或属于一个对象的两个整数。如果我在优先级队列中有许多要比较的项目,比较器如何工作。感谢所有帮助/输入!!!

4

2 回答 2

1

假设我们有一个Patient带有 int 变量的类severity

“如果一个 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
}

现在,要制作 a PriorityQueue- a 的语义PriorityQueue是在任何插入时自动排序的集合的语义,这样最高比较元素(在本例中为最高严重性)位于开头。

因此,要插入 a PriorityQueue,我们可以PriorityQueue通过说 an 来“支持” ArrayList,然后使用二进制搜索compareTo来查看我们是否需要看起来更高、更低或是否有匹配。如果我们有匹配,那么我们可以在那里插入。如果我们没有找到匹配项,但我们将其范围缩小到比下面的元素更严重但比上面的元素少,我们可以将它插入那里。

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

于 2013-03-14T23:04:36.440 回答
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);
}
于 2013-03-14T23:05:58.077 回答