Stammbaum durchlaufen (Iteration etc)

kellogz1302

Mitglied
Hallo zusammen,

ich stehe vor folgender Aufgabe:

Es soll eine Klasse Person erstellt werden, diese Person hat eine ArrayList an Nachfolgern. Von diesen Personen gibt es logischerweise jetzt ein paar Stück, so dass hinterher eine Art Könige-Abstammungs-Baum entsteht. Sprich: Teilweise gibt es nur einen Nachfolger, manchmal jedoch auch 3 oder 4 oder eben gar keinen.

Soweit, so gut.

Klasse Person sieht derzeit folgendermaßen aus:

Java:
 import java.util.ArrayList;
public class Person{

	private String name;
	private ArrayList<Person> nachfolger = new ArrayList<Person>();

	public Person(String name){
		this.name = name;
	}

	public String getName(){
		return name;
	}
	
	public void setName(){
		this.name = name;
	}

	}

	public void addNachfolger(Person nachfolgender){
		nachfolger.add(nachfolgender);
	}	

	public String toString(){
		return name + " (" +  nachfolger.size() + " 	Nachfolger)\n";
	}
}

Zusaetzlich gibt es eine Klasse Karolingerreich, die dieses tolle Reich erstellt. Diese hab ich wie folgt erstellt:

Java:
public class Karolingerreich{
	public static void main(String[] args){
		Person karl = new Person("Karl der Große");
		Person ludwig = new Person("Ludwig der Fromme");
		Person lothar = new Person("Lothar");
		Person pippin = new Person("Pippin");
		Person ludwigd = new Person("Ludwig der Deutsche");
		Person karlk = new Person("Karl der Kahle");
		Person ludwig2 = new Person("Ludwig II.");
		Person karlmann = new Person("Karlmann");
		Person ludwig3 = new Person("Ludwig III.");
		Person karld = new Person("Karl der Dicke");
		Person arnulf = new Person("Arnulf von Kaernten");
		Person ludwigk = new Person("Ludwig das Kind");
		//Nachfolger
		karl.addNachfolger(ludwig);
		ludwig.addNachfolger(lothar);
		ludwig.addNachfolger(pippin);
		ludwig.addNachfolger(ludwigd);
		ludwig.addNachfolger(karlk);
		lothar.addNachfolger(ludwig2);
		ludwigd.addNachfolger(karlmann);
		ludwigd.addNachfolger(ludwig3);
		ludwigd.addNachfolger(karld);
		karlmann.addNachfolger(arnulf);
		arnulf.addNachfolger(ludwigk);
}
}

und jetzt geht es ans Eingemachte:

Durch jeweils eine iterative Suchmethode soll per Breitensuche und Tiefensuche folgendes ausgegeben werden:

Ausgabe Breitensuche:

Karl der Grosse (1 Nachfolger)
Ludwig der Fromme (4 Nachfolger)
Lothar (1 Nachfolger)
Pippin (0 Nachfolger)
Ludwig der Deutsche (3 Nachfolger)
Karl der Kahle (0 Nachfolger)
Ludwig II. (0 Nachfolger)
Karlmann (1 Nachfolger)
Ludwig III. (0 Nachfolger)
Karl der Dicke (0 Nachfolger)
Arnulf von Kaernten (1 Nachfolger)
Ludwig das Kind (0 Nachfolger)

Ausgabe Tiefensuche:
Karl der Grosse (1 Nachfolger)
Ludwig der Fromme (4 Nachfolger)
Karl der Kahle (0 Nachfolger)
Ludwig der Deutsche (3 Nachfolger)
Karl der Dicke (0 Nachfolger)
Ludwig III. (0 Nachfolger)
Karlmann (1 Nachfolger)
Arnulf von Kaernten (1 Nachfolger)
Ludwig das Kind (0 Nachfolger)
Pippin (0 Nachfolger)
Lothar (1 Nachfolger)
Ludwig II. (0 Nachfolger)

Trotz Google, lesen in Foren, lesen in Vorlesungsunterlagen bekomm ich nicht den richtigen Ansatz hin, geschweige denn eine Lösung. Ich hoffe, ihr könnt mir bei meinem Problem helfen!

Danke im Voraus
 

Gucky

Top Contributor
Dafür wäre ein Baum wohl eher geeignet. In diesem Baum hat jeder Knoten eine ArrayList an Knoten, die nach ihm kommen. Jeder Knoten hat Eigenschaften, wie Name, Todesdatum etc.
Der Klasse Stammbaum, die die ganzen Personen verwaltet übergibst du dann etwas, um die Person zu identifizieren und die Nachfolger fügst du hinzu mit einer add...() Methode. Also so: addPerson("Ludwig der erste", "Ludwig der zweite") der erste String identifiziert die Person und mit dem zweiten String wird eine neue Person gemacht. Dann machst du noch getter und setter Methoden und du hast einen wunderschönen Baum.
Da du von Vorlesungsunterlagen sprachst, denke ich, dass ist eine Aufgabe um einen Baum zu erstellen.
 

kellogz1302

Mitglied
Hi,
zunächst danke für die rasche Antwort. Hier stellen sich nun folgende Probleme. Es gibt lediglich Namen, d.h. keine sonstigen Eigenschaften, lediglich die Beziehung zum "Vater". Hier mal der Aufgabentext dazu:

"Die Aufgabe dieser Übung wird es sein, eine Baumstruktur zu implementieren, die einen
kleinen Teil des Karolingerreichs nach Karldem Großen repräsentiert.
Hierfür wird zuerst ein Objekt Personbenötigt, die den jeweiligen Herrscher repräsentiert.
Jede dieser Personen bekommt eine Liste an Nachfolgern, unter denen ihr Reich aufgeteilt wurde.

a) Erstellen Sie eine Klasse Person, die einen String name
sowie eine ArrayList<Person> nachfolger beinhaltet.
Implementieren Sie die nötigen Getter und Setter sowie einen Konstruktor. Implementieren Sie zusätzlich eine Methode addNachfolger(...), die einer Person einenzusätzlichen Nachfolger
zuordnet sowie eine Methode toString(), die den Namen der Person und dieAnzahl der Nachfolger zurückgibt.

b)
Implementieren Sie eine Klasse Karolingerreich,die in der main-Methode einen Baum der folgenden Struktur mit Hilfe der Personen konstruiert:

Karl d.G. - Ludwig der Fromme - hier stünden jetzt 4 Nachfolger - Nun wieder Nachfolger etc."

Das Problem ist jetzt Aufgabe b) Hier haben wir auch keinerlei Anhaltspunkte, wie man vorgehen soll. Auch Bäume etc wurden nur kurz angerissen, vielleicht kann hier noch genauer geholfen werden? Vielen Dank!
 

Gucky

Top Contributor
Guck dir mal BinärBäume in der Wikipedia an. Das ist praktisch dasselbe nur das du in deinem Fall beliebig viele Nachfolger hast.

EDIT: ich sehe grade, dass da steht "in der main Methode". Streng genommen ist deine Version richtig. Aber didaktisch ist dann die Aufgabenstellung schlecht. Mach mal lieber eine Klasse StammBaum.

Dann benutzt du halt als ID den Namen.
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Es ist aber fast dasselbe. Der Unterschied ist aber, dass du mehrere Referenzen haben KANNST. Der Unterschied ist nicht groß.
 

kellogz1302

Mitglied
Hm okay, also kann ich quasi den Binärbaum als "Ausgang" nutzen.

Nun zum Coden...nachdem ich mich nun Tag und Nacht damit beschäftigt habe, habe ich mittlerweile das Gefühl, gar nichts mehr zu wissen ... :autsch: Ich erzeuge also ein TreeSet?

PS: Danke für deien Mühe :)
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Da nicht für. Deshalb bin ich hier.
Du erzeugst kein TreeSet. Du implementierst es.

Du musst konkrete Fragen stellen, damit ich dir helfen kann.
 

kellogz1302

Mitglied
Okay, hab mich jetzt mal schlaugemacht, was es mit dem TreeSet auf sich hat. Diesen implementiere ich jetzt in der "Start/Main" Klasse Karolingerreich? In etwa so?

Java:
public static void main(String[] args){
    Set<Person> karolingerreich = new TreeSet<Person>();
    set.add(new Person("Karl"));
    System.out.println(karolingerreich);
}

Konkrete Frage jetzt hierzu:

Die Nachfolger habe ich ja über die jeweilige Person als ArrayList angehangen. Muss ich trotzdem nun alle Personen adden oder sind diese durch die "Verkettung" der Nachfolger automatisch im TreeSet? Sprich, wie definiere ich diese Knoten? So könnte ich das TreeSet ja noch nicht durchlaufen...

Vielen Dank für die Hilfe
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Kann man ein Set mit einem Sysout ausgeben?

Jetzt hast du einen Baum als ein Element in einen Baum eingefügt. Damit, dass du kein TreesSet erzeugst sondern implementierst, meinte ich, dass du eines selber schreibst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Binärbaum (Stammbaum) Java Basics - Anfänger-Themen 8
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
TimoN11 Array -> Schleife wieder von vorne durchlaufen lassen Java Basics - Anfänger-Themen 1
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
E Baum pfadweise durchlaufen Java Basics - Anfänger-Themen 11
S Array X-mal durchlaufen und dann N-mal durchlaufen Java Basics - Anfänger-Themen 20
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
I Methoden Schleife immer wieder durchlaufen lassen Java Basics - Anfänger-Themen 15
S Rekursives Durchlaufen eines Verzeichnisses - AccessDeniedException behandeln Java Basics - Anfänger-Themen 1
T Objekt-Arrays mit einer Schleife durchlaufen/ausgeben Java Basics - Anfänger-Themen 2
B Durchlaufen von Hashmap und Arraylist Java Basics - Anfänger-Themen 8
B OOP Liste durchlaufen Java Basics - Anfänger-Themen 12
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
C Laufzeitverhalten beim zeilenweise durchlaufen eines 2 dimensional array Java Basics - Anfänger-Themen 6
W If_Bedingung in statischer Methode beim zweiten Mal nicht durchlaufen Java Basics - Anfänger-Themen 14
L Klassen nacheinander durchlaufen? Java Basics - Anfänger-Themen 5
A do while Schleife wird 2 mal durchlaufen Java Basics - Anfänger-Themen 3
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
D HashMap Keys durchlaufen Java Basics - Anfänger-Themen 2
R Switch: Nach durchlaufen des Case wieder zum Menü Java Basics - Anfänger-Themen 3
S Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen Java Basics - Anfänger-Themen 3
A Array wird nicht durchlaufen Java Basics - Anfänger-Themen 10
A Treeset per For-Schleife durchlaufen Java Basics - Anfänger-Themen 2
K Objektbaum durchlaufen Java Basics - Anfänger-Themen 7
S Erfahrungswerte von schnelles durchlaufen von Listen mit 2 Werten Java Basics - Anfänger-Themen 10
A Datentypen Iterator von hinten nach vorne durchlaufen Java Basics - Anfänger-Themen 4
M Zweidimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
C dynamische JTextFields durchlaufen Java Basics - Anfänger-Themen 5
J äußere for schleife wird nur einmal durchlaufen Java Basics - Anfänger-Themen 8
T Datentypen Verschachtelte Map durchlaufen Java Basics - Anfänger-Themen 4
N Map Durchlaufen Java Basics - Anfänger-Themen 20
R Fehler in Rekursion (Unterordner durchlaufen) Java Basics - Anfänger-Themen 2
J Problem Arraylist durchlaufen Java Basics - Anfänger-Themen 7
K methode wird nur einmal korrekt durchlaufen Java Basics - Anfänger-Themen 4
B Array durchlaufen und sortieren Java Basics - Anfänger-Themen 9
N HashMap mit Iterator durchlaufen Java Basics - Anfänger-Themen 11
P Klassen-konstanten durchlaufen Java Basics - Anfänger-Themen 9
M Durchlaufen von Sets Java Basics - Anfänger-Themen 11
H Monat durchlaufen Java Basics - Anfänger-Themen 2
W Textfiles durchlaufen Java Basics - Anfänger-Themen 11
M Durchlaufen eines Verzeichnisbaums Java Basics - Anfänger-Themen 5
G Rekursion mit Return - Baum durchlaufen Java Basics - Anfänger-Themen 4
F Objektnamen mit Schleife durchlaufen. Java Basics - Anfänger-Themen 10
G [Threads]: Mit mehreren Threads 1 ArrayList durchlaufen Java Basics - Anfänger-Themen 19
G HashMap durchlaufen und alle keys mit values ausgeben Java Basics - Anfänger-Themen 4
M Variablen einer Klasse zu durchlaufen möglich? Java Basics - Anfänger-Themen 5
K 2D Array spaltenweise durchlaufen Java Basics - Anfänger-Themen 4
G Baumstruktur rekursiv durchlaufen Java Basics - Anfänger-Themen 2
M Textfile durchlaufen und ersetzen Java Basics - Anfänger-Themen 2
M textboxen mit schleife durchlaufen. Java Basics - Anfänger-Themen 5
G Alle Componente eines JFrame durchlaufen Java Basics - Anfänger-Themen 3
P Schleife wird falsch durchlaufen!? Java Basics - Anfänger-Themen 3
H HashMap durchlaufen Java Basics - Anfänger-Themen 4
M Verzeichnisse rekursiv durchlaufen und dann RegEx Java Basics - Anfänger-Themen 6
J Durchlaufen von Vektoren Java Basics - Anfänger-Themen 14
G Array mit Schleife durchlaufen - guter Stil? Java Basics - Anfänger-Themen 20
K durchlaufen einer methode zählen Java Basics - Anfänger-Themen 15
M for-Schleife und Variablen automatisch durchlaufen Java Basics - Anfänger-Themen 2
W Baum durchlaufen Java Basics - Anfänger-Themen 3
M String mit For Each durchlaufen Java Basics - Anfänger-Themen 4
E liste rekursiv durchlaufen? Java Basics - Anfänger-Themen 3
S NameValuePair durchlaufen Java Basics - Anfänger-Themen 4
D Verzeichnisse rekursiv durchlaufen Java Basics - Anfänger-Themen 3
M HashMap durchlaufen: Was stimmt nicht? Java Basics - Anfänger-Themen 7
Mehmetaa Iteration Java Basics - Anfänger-Themen 3
Henri Iteration lauft nicht gut Java Basics - Anfänger-Themen 7
Henri Erste Schritte Iteration ändern Java Basics - Anfänger-Themen 12
I Iteration in Feldern Java Basics - Anfänger-Themen 2
C Compiler-Fehler Wird eine if Bedingung nach einer for-Schleife nach jeder Iteration überprüft? Java Basics - Anfänger-Themen 1
F Array Iteration Java Basics - Anfänger-Themen 4
M Löschen von Objekten während Iteration über Liste Java Basics - Anfänger-Themen 9
D Rekursion in Iteration Java Basics - Anfänger-Themen 5
K Iteration - Alte und neue For Schleife Java Basics - Anfänger-Themen 17
A ArrayList-iteration mit Prüfung auf instanceof durch switch case? Java Basics - Anfänger-Themen 13
J Umgekehrte Iteration Java Basics - Anfänger-Themen 5
Q Iteration wie machen Java Basics - Anfänger-Themen 5
W iteration Java Basics - Anfänger-Themen 8
H Iteration und Editierung einer Liste Java Basics - Anfänger-Themen 6
B Collection während Iteration verändern Java Basics - Anfänger-Themen 7
T Iteration Java Basics - Anfänger-Themen 3
G iteration durch Array stoppt nicht bei Laufbedingung? Java Basics - Anfänger-Themen 13
C Lösung einer Aufgabe mittels Iteration und Rekursion Java Basics - Anfänger-Themen 12
W Aus Iteration mach Rekursion Java Basics - Anfänger-Themen 3
G Rekursion versus Iteration Java Basics - Anfänger-Themen 58

Ähnliche Java Themen


Oben