Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit Java (einfach verkettete Liste) (https://www.delphipraxis.net/104522-problem-mit-java-einfach-verkettete-liste.html)

fwsp 5. Dez 2007 17:15


Problem mit Java (einfach verkettete Liste)
 
hallo,

ich bin derzeit dabei mir ein wenig java anzueignen, hab allerdings ein kleines problem.
ich soll eine Struktur zur speicherung von studentendaten schreiben und dafür eine einfach verkettete liste nutzen. leider komm ich nicht allzu weit, ich bekomme java.lang.NullPointerException in der ausgewiesenen zeile, leider kann ich mit beschreibung nichts anfangen. wenn ich es richtig verstanden habe, deutet es daraufhin, dass der speicherbereich null ist.
kann mir jemand weiter helfen?
danke.

Code:
public class StudentenListe {   

   private Student Kopf;
   
   public void StudentenListe() {
      Kopf = new Student();
   }
   
    public void einfuegen(int ANr, String AName, String AVorname) {
       Student NeuerStudent;
       
       NeuerStudent = new Student();
      NeuerStudent.setMatrikel(ANr);
      NeuerStudent.setName(AName);
      NeuerStudent.setVorname(AVorname);
      
      Kopf.Next = NeuerStudent; //hier ist der fehler: java.lang.NullPointerException
    } 
}
Code:
public class Student {
   private int FMatrikel;
   private String FName;
   private String FVorname;
   public Student Next;
      
   Student() {
      this.FMatrikel = 0;
      this.Next = null;
   } 
   ...
}

OregonGhost 5. Dez 2007 17:49

Re: Problem mit Java (einfach verkettete Liste)
 
Meine Java-Kenntnisse sind zwar eingerostet, aber ist hier:
Zitat:

Code:
   public void StudentenListe() {
      Kopf = new Student();
   }

nicht ein void zuviel? Würde mich eigentlich überraschen, wenn in Java anders als in C# oder C++ ein void vor dem Konstruktor stehen dürfte.

Edit: Verrät dir der Debugger deines Vertrauens nicht, dass zum Zeitpunkt der Exception Kopf null ist?

fwsp 5. Dez 2007 17:53

Re: Problem mit Java (einfach verkettete Liste)
 
danke, jetzt scheint es funktionieren.
ich fang ja nicht nur mit java, sondern auch mit eclipse erst an und hab mich noch nicht in alles eigearbeitet.

Nikolas 5. Dez 2007 18:24

Re: Problem mit Java (einfach verkettete Liste)
 
Hierwird heute ein Javabuch verschenkt, vielleicht hilfts dir beim Lernen.

fwsp 5. Dez 2007 21:03

Re: Problem mit Java (einfach verkettete Liste)
 
Zitat:

Zitat von Nikolas
Hierwird heute ein Javabuch verschenkt, vielleicht hilfts dir beim Lernen.

das hab ich schon gesehen und geladen^^

ich hab nun ein weiteres problem:
ich soll die Liste einmal als "richtige" klasse und einmal als datenkapsel definieren. dazu muss man ja vor alle attribute und methoden static schreiben. doch ich bekomm leider nen fehler und kann nicht einschätzen woran dsa liegt.

Code:
public class StatStudentenListe {   

   private static Student Kopf;
   
   public StatStudentenListe() {
      Kopf = new Student();
   }
   
   private static boolean IsNrInList(int ANr) {
      boolean Result = false;
      Student tmpItem = Kopf;
      
        while ((tmpItem != null) && !(Result)) {
           if (tmpItem.getMatrikel() == ANr) {
              Result = true;
           }
           tmpItem = tmpItem.getNext();
        }   
        return Result;      
   }
   
    public static void einfuegen(int ANr, String AName, String AVorname) {      
       if (!(IsNrInList(ANr))) {
          Student NeuerStudent = new Student();
          Student tmpItem = Kopf;
       
          NeuerStudent.setMatrikel(ANr);
          NeuerStudent.setName(AName);
          NeuerStudent.setVorname(AVorname);
      
          while (tmpItem.getNext() != null) {
             tmpItem = tmpItem.getNext(); // fehler: java.lang.NullPointerException
          }
      
          tmpItem.setNext(NeuerStudent);
       }
    }   
}
wenn ich nun StatStudentenListe.einfuegen(1, "Name0001", "Vorname0001"); eingebe, kommt der obige fehler. liegt es an der art, wie ich auf die statische variable Kopf zugreife?

Khabarakh 5. Dez 2007 21:16

Re: Problem mit Java (einfach verkettete Liste)
 
Wenn du Kopf nur in einem normalen Konstruktor zuweist, müsstest du natürlich diesen auch irgendwo zuerst mit new aufrufen. Entweder machst du den Konstruktor wie die anderen Methoden static, dann wird er implizit vor der ersten Verwendung der Klasse aufgerufen, oder du weist den Wert schon bei der Feld-Deklaration zu (ich gehe einfach mal davon aus, dass Java das kann ;) ):
Code:
private static Student Kopf = new Student();
PS: Dein erstes Problem war aber wirklich böse ;) . Man hätte da wirklich eine Fehlermeldung des Compilers erwarten können, C# macht es jedenfalls so ^^ .

fwsp 5. Dez 2007 21:20

Re: Problem mit Java (einfach verkettete Liste)
 
ich hab ja probiert, den konstruktor static zu machen, dass wollte die ide aber net. wenn ich es bei der initialisierung mache, klappt es. danke^^

Khabarakh 5. Dez 2007 21:28

Re: Problem mit Java (einfach verkettete Liste)
 
Ist wohl wirklich der einzige funktionierende Weg von diesen beiden, als Alternative zum statischen Konstruktor gibt's eine... interessante Syntax: http://forum.java.sun.com/thread.jsp...sageID=4232190 .


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz