2016-03-26 7 views
0

Ich muss ein Programm schreiben, das eine verknüpfte Liste von Studenten implementiert, in diesem Fall Student ist eine separate Klasse, die aufgerufen wird. Meine verknüpfte Liste soll in der Lage sein, einen Schüler zu finden, der den Namen dieses Schülers verwendet, und dies ist der Bereich, in dem mein Programm fehlschlägt, es scheint nicht den Knoten für diesen Schüler zu finden, daher wird es auch nicht gelöscht. Ich schreibe dies für eine Klasse und der Professor erlaubt nicht die Verwendung der eingebauten Klasse Linked List.Suchen und Löschen eines Knotens aus dieser verketteten Liste in Java

Dies ist mein Code

public class StudentList { 

    StudentNode head; 

    public StudentList() { 

     shead = null; 
    } 

    public void setShead(StudentNode data) { 

     shead = data; 
    } 

    public StudentNode getShead() { 

     return shead; 
    } 

    public void insert(StudentNode data) { 

     StudentNode iterator = head; 

     if (iterator == null) { 
      head = data; 

     } else { 
      while (iterator.getnext() != null) { 
       iterator = iterator.getnext(); 

      } 

      iterator.setnext(data); 
     } 
    } 

    public void delete(StudentNode data) { 

     StudentNode iterator = head; 
     StudentNode current; 

     if (iterator == data) { 
      head = iterator.getnext(); 
     } else { 
      while (iterator.getnext() != null) { 
       if (iterator.getnext().equals(data)) { 
        // current 
        iterator.setnext(iterator.getnext().getnext()); 
        // current.setSptr(iterator.getnext()); 
        break; 
       } else { 
        iterator = iterator.getSptr(); 
       } 
      } 
     } 
    } 

    public StudentNode find(String n) { 

     StudentNode iterator = head; 
     StudentNode result = null; 

     while (iterator.getnext() != null) { 

      if (iterator.getStudent().getName().equals(n)) { 
       result = iterator; 
       System.out.println("" + iterator.getStudent().getName()); 
      } else { 
       result = null; 
      } 
      iterator = iterator.getnext(); 
     } 
     return result; 
    } 

    public void print(){ 

      StudentNode iterator = head; 

      while(iterator != null){ 
        JOptionPane.showMessageDialog(null,""+ iterator.getStudent().getName()); 
        iterator = iterator.getnext(); 
      } 
     } 
} 

Dies ist der Knoten

public class StudentNode{ 

     private Student data; 
     private StudentNode next; 

     public StudentNode(){ 

      data = null; 
      next = null; 
     } 

     public StudentNode(Student data){ 

      this.data = data; 
      next = null; 
     } 

     public Student getStudent(){ 

      return data; 
     } 

     public void setStudent(Student data){ 

      this.data = data; 
     } 

     public StudentNode getnext(){ 

      return next; 
     } 

     public void setnext(StudentNode next){ 

      this.next = next; 
     } 
} 

Antwort

0
`if(iterator == data){` // <-- It just checks for same reference 
       head = iterator.getnext(); 
     } 

if(iterator.getnext().equals(data)){ // < - auch hier, da Sie equals Methode überschrieben havent .. Referenzen werden comparaed

Auch ich sehe dich nicht c Alling find Methode

Sie sollten gleichwertige Methode in StudentNode überschreiben, wo Sie Student Objekt vergleichen und überprüfen können, ob diese gleich sind oder nicht.

Verwandte Themen