2016-11-25 147 views
0

所以我試圖解決一個問題,涉及添加對象到鏈接列表。自上午以來,我一直在討論這個問題,至今我還沒有得到確切的結果。鏈接列表添加方法不按預期工作

我的程序基本上是根據兩個標準severityarrival將患者添加到鏈接列表中。 我想用severity將患者從最高位增加到最低位。如果他們確實具有相同的嚴重性,那麼我希望按照升序來存儲它們。因此,例如,

患者1,到貨2,嚴重3

患者2,到貨3,嚴重性3

或者,如果他們有不同的嚴重程度則是這樣的:

患者1,到達2,嚴重性2

患者2,到達1,嚴重性1

總之severity必須是按降序排列和如果嚴重性是相同然後根據arrival它們存儲在升序排列。

是我迄今爲止嘗試過是這樣的,這種方法是在patient類:

public boolean compareSeverity(Patient other) { 
boolean result = false; 
if(other.severity > severity) { 
    result = true; 
} else if(other.severity == severity) { 
    if(other.arrival > arrival) { 
    result = true; 
    } else { 
     result = false; 
    } 
    } else { 
    result = false; 
    } 
    return result; 
} 

這也是我如何編碼的我add方法爲linked list類。

public void add(String name, int severity) { 
lastArrival++; 
Patient patient = new Patient(name, lastArrival, severity); 
PatientNode current, previous; 
current = head; 
previous = null; 
if(head == null) { 
    head = current = new PatientNode(patient, head); 
    size++; 
} else { 
    while(current!=null) { 
    //previous = current; 
    if(current.data.compareSeverity(patient)) { 
    PatientNode n = new PatientNode(patient,current); 
    size++; 
    if(previous!=null) { 
     previous.next = n; 
     } 
     return; 
    } 
    previous = current; 
    current = current.next; 
    } 
    } 
} 

但是,當我嘗試運行我的程序時,它只顯示一個病人。

我從早上一直在修補我的方法,這是迄今爲止我所得到的。也許我需要一套新的眼睛,因爲現在我無法解決這個問題。任何幫助將不勝感激。 The output that i am getting

編輯2

列表被完全打印出來,但它不執行標準,如果嚴重程度是一樣的,然後存儲患者按升序排列。

New Output

回答

0

您從以前的指針設置爲n,但你永遠不設置從n個指針下一個。您只是在鏈接列表中創建您需要的兩個鏈接之一。

if(current.data.compareSeverity(patient)) { 
    PatientNode nextHolder = current.next; 
    PatientNode n = new PatientNode(patient,current); 
    size++; 
    n.next = current; //this line forgotten?? 
    if(previous==null) { 
     head = n; 
    } 
    else { 
     previous.next = n; 
    } 
    return; 
} 


previous = current; 
current = current.next; 

您還需要處理新專利在列表中首先出現,並且頭部變量需要更新的情況。

+0

我是不是通過'if(head == null)'聲明來處理第一個病人? – Mooe

+0

我剛剛運行該程序,但仍顯示只有一名患者。看起來它正在失去節點。 – Mooe

+0

我剛剛在新患者列表中的第一個病例中進行了適當的更正。在這種情況下,您需要將頭部變量指向新記錄。如果你的測試不是這樣的話,那麼你可能最終永遠不會更新頭部,除非你輸入第一個,否則絕不會看到任何東西。 – AgilePro