Zum Inhalt springen

NullPointerException bei rekursiven Funktionsaufruf


hawkeye78

Empfohlene Beiträge

Hallo,

ich hänge im moment bei einem Algorithmus der einen binären Baum durchsuchen soll, und null zurückgeben soll, wenn der Knoten gefunden wird. Wenn ich diesen Algorithmus als schleife implementiere läuft er, allerdings liefert das Programm einen Null Pointer Exception wenn ich es rekursiv implementiere.

Mein Quellcode schaut im moment so aus


public class Baum

{

	public Knoten search(int x, Knoten aktuellerKnoten)

	{

		if(x<aktuellerKnoten.getValue() && aktuellerKnoten.getNextLeft()!=null)

		{

			search(x,aktuellerKnoten.getNextLeft());

		}


		if(x>aktuellerKnoten.getValue() && aktuellerKnoten.getNextLeft()!=null)

		{

			search(x,aktuellerKnoten.getNextRight());			

		}


		if(x==aktuellerKnoten.getValue())

		{

			return null;

		}


		return aktuellerKnoten;

	}


	public void insert(int i)

	{

		Knoten aktuellerKnoten;

		Knoten neu=null;


		// Überprüfung auf einen leeren Baum

		if(first==null)

		{

			neu=new Knoten(i);

			setFirst(neu);

		}

		else

		{

			// Suche ob der Knoten bereits im Baum existiert

			aktuellerKnoten=search(i, first);

}


	public class Knoten

	{

		private int wert;

		private Knoten nextLeft;

		private Knoten nextRight;


		public Knoten(int i)

		{

			wert=i;

			nextLeft=null;

			nextLeft=null;

		}


		public int getValue()

		{

			return wert;

		}


		public Knoten getNextLeft()

		{

			return nextLeft;

		}


		public Knoten getNextRight()

		{

			return nextRight;

		}


		public void setNextLeft(Knoten e)

		{

			nextLeft=e;

		}

}

}

Der Fehler tritt offenbar in der Methode "search" auf, aber leider habe ich keine Ahnung warum, ich wäre daher über einen kleinen Hinweis, was ich noch an dem Quellcode modefizieren muß sehr dankbar.

Viele Grüsse

Dan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Fehler entsteht beim Aufruf von getValue() auf einem nicht vorhandenne Objekt.

Wenn der Wert in einem Teilbaum nicht enthalten ist, wird dieser Unterbaum von Deinem Programm komplett durchsucht, da Du immer weiter getNextLeft() und getNextRight() aufrufst. Allerdings kommst Du dabei irgendwann an den Blättern an und dann geben Dir diese Funktionen den Wert null zurück. Damit gehst Du dann trotzdem in die nächste Iteration und rufst ohne auf null zu prüfen wieder getValue() auf, was nun fehlschlagen muss.

Abgesehen davon solltest Du Deine Rückgabewerte überprüfen, auf den ersten Blick schaut es für mich so aus, als ob Du etwas anderes beabsichtigst, als Du programmiert hast.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Bubble,

erst einmal möchte ich mich für dein Posting bedanken, aber der Fehler ist viel Profaner und ich schäme mich fast wegen so einer nichtigkeit hier gepostet zu haben:


public class Baum

{

public Knoten search(int x, Knoten aktuellerKnoten)

{

if(x<aktuellerKnoten.getValue() && aktuellerKnoten.getNextLeft()!=null)

{

search(x,aktuellerKnoten.getNextLeft());

}


if(x>aktuellerKnoten.getValue() && aktuellerKnoten.getNextLeft()!=null) <---

{

search(x,aktuellerKnoten.getNextRight());

}


Ich habe statt einmal nach links und einmal nach Rechts zu verzweigen in beiden If-Statements nach Linksverzweigt bzw. abgefragt ob ein linkes Kind existiert. Nachdem ich die Bedingung für das If-Statement angepaßt habe lief das Programm ohne Probleme.

Noch einmal vielen Dank für deine Hilfe.

Viele Grüsse

Dan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...