2013-03-14 258 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