2016-11-25 7 views
0

Так что я пытаюсь решить проблему, связанную с добавлением объектов в связанный список. Я был с этой проблемой с утра, и до сих пор я еще не получил точный результат.Метод добавления связанного списка не работает должным образом

Моя программа в основном добавляет пациентов в связанный список в соответствии с двумя критериями: severity и arrival. Я хочу добавить пациентов от наивысшего к самому низкому, используя 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

Edit 2

Список печать полностью, но он не выполняет критерии, если тяжесть такой же, а затем сохранить пациентов в порядке возрастания.

New Output

ответ

0

Вы установите указатель от предыдущего п, но вы никогда не установить указатель от п к следующему. Вы делаете только одну из двух ссылок, которые вам нужны в связанном списке.

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