![]() |
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; } ... } |
Re: Problem mit Java (einfach verkettete Liste)
Meine Java-Kenntnisse sind zwar eingerostet, aber ist hier:
Zitat:
Edit: Verrät dir der Debugger deines Vertrauens nicht, dass zum Zeitpunkt der Exception Kopf null ist? |
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. |
Re: Problem mit Java (einfach verkettete Liste)
![]() |
Re: Problem mit Java (einfach verkettete Liste)
Zitat:
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:
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?
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); } } } |
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:
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 ^^ .
private static Student Kopf = new Student();
|
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^^
|
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:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz