Türme von Hanoi: aktuelle Belegungszustände ausgeben?

Status
Nicht offen für weitere Antworten.

BlueDolphin

Mitglied
Hey,

ich bin grade dabei die Rekursion zu verstehen und habe folgendes Problem. Ich möchte bei meinem Programm "Hanoi", welches das Spiel "Die Türme von Hanoi" ausführt, die jeweils aktuellen Belegungszustände der 3 Stapel ausgeben. D.h. z.B. für 3 Scheiben:

Am Anfgang liegen alle alle 3 Scheiben auf dem Ausgangsstapel (1) --> Ausgabe: 1 1 1
Die oberste Scheibe wandert auf den Zielstapel (3) --> Ausgabe: 3 1 1
Die mittlere Scheibe wandert auf den Hilfsstapel (2) --> Ausgabe: 3 2 1
Die oberste Scheibe wandert vom Zielstapel (3) auf den Hilfsstapel (2) --> Ausgabe: 2 2 1
Die unterste Scheibe wandert vom Ausgangsstapel (1) auf den Zielstapel (3) --> Ausgabe: 2 2 3
Die oberste Scheibe wandert vom Hilfsstapel (1) auf den Ausgangsstapel (1) --> Ausgabe: 1 2 3
Die mittlere Scheibe wandert vom Hilfsstapel (2) auf den Zielstapel (3) --> Ausgabe: 1 3 3
Die oberste Scheine wandert vom Ausgangsstapel (1) auf den Zielstapel (3) --> Ausgabe: 3 3 3

"2 2 1" bedeutet also: Die oberste Scheibe befindet sich auf Stapel 2, die mittlere Scheibe befindet sich auf Stapel 2, die unterste Scheibe befindet sich auf Stapel 1

Es soll also bei jeder beliebigen Anzahl von Scheiben (n) immer von 111 nach 333 gehen.
Ich habe es schon mit switch und if-Abfragen probiert, bekomme es aber höchstens so hin, dass nur der aktuelle Zustand von der Scheibe ausgeben wird, die sich zuletzt bewegt hat.

Wäre schön. wenn jemand einen Tipp für mich hat :roll:

Danke, Susi

Code:
public class Hanoi {
	
	void zieheScheibe(char Ausgang, char Ziel) {
		System.out.println("Bewege Scheibe von " +Ausgang+ " nach " +Ziel);	
	}
	
	void Hanoi(int n, char X, char Y, char Z) {
		
		if(n==1) {
			zieheScheibe(X,Z);
		}
		else {
			Hanoi(n-1,X,Z,Y);
			//Stapel der Höhe n-1 von X nach Y mit Zwischenablage Z
			zieheScheibe(X,Z);
			Hanoi(n-1,Y,X,Z);
			//Stapel der Höhe n-1 von Y nach Z mit Zwischenablage X	
		}
	}
}

class HanoiApplication {
	
	public static void main (String[] args) {
		char A = 'A', B = 'B', C = 'C';
		int n = 3; //3 Scheiben
		Hanoi th = new Hanoi();
		th.Hanoi(n,A,B,C);
	}
}
 
S

SlaterB

Gast
BlueDolphin hat gesagt.:
Es soll also bei jeder beliebigen Anzahl von Scheiben (n) immer von 111 nach 333 gehen.
meinst du von
111...........1111
nach
33333.......333

oder wirklich nur drei Zahlen für oberste, mittlere (welche ist das bei n Scheiben?) und unterste Scheibe?

so wie das Programm derzeit gebaut ist funktioniert das nicht,
da musst du nebenbei noch eine Datenstruktur führen, in der für jede Scheibe die aktuelle Position gemerkt wird
+ bisschen Logik um bei einer Verschiebung zu erkennen welche Scheibe verschoben wurde
(also auch die Reihenfolge der Scheiben auf jeden Stapel merken)

ganz grobe Idee:
ein int[]-Array der Länge n für jeden Stapel, drei Stück also,

am Anfang im ersten [1,2,3,4,5,6, ..,]
im zweiten und dritten [0,0,0,....]
dann kommt von der rekrusiven Operation die Info "eine Scheibe vom ersten nach dritten verlegt",
-> die oberste Scheibe im ersten suchen (höchster Index != 0), dort 0 setzten,
im dritten Stapel den obersten Index suchen und dort die neue Nummer eintragen

wenn die drei Arrays so immer aktuell sind ist eine Ausgabe leicht
 

BlueDolphin

Mitglied
Hey SlaterB,

danke für die Antwort. Ich werde mir nachher mal einen Kopf darüber machen und ausprobieren.

meinst du von
111...........1111
nach
33333.......333

oder wirklich nur drei Zahlen für oberste, mittlere (welche ist das bei n Scheiben?) und unterste Scheibe?

Da habe ich mich etwas doof ausgedrückt. Bei 4 Scheiben wäre es dann ntürlich von 1111 nach 3333 ;)

LG, Susi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
wuerg Türme von Hanoi Iterativ Java Basics - Anfänger-Themen 8
S Türme von Hanoi Java Basics - Anfänger-Themen 36
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
K Türme von Hanoi - Rekursiv. Java Basics - Anfänger-Themen 1
C Türme von Hanoi - Anzhal der Züge Java Basics - Anfänger-Themen 1
D Türme von Hanoi in "Java ist auch eine Insel" Java Basics - Anfänger-Themen 4
D Türme von hanoi Java Basics - Anfänger-Themen 7
B Türme von Hanoi ausgabe Java Basics - Anfänger-Themen 2
shiroX OOP Türme von Hanoi - einfache grafische Ausgabe Java Basics - Anfänger-Themen 2
T Türme von Hanoi Java Basics - Anfänger-Themen 9
D > 3 Türme von Hanoi Java Basics - Anfänger-Themen 11
J Erste Schritte türme von hanoi verständnisprobleme Java Basics - Anfänger-Themen 6
B Türme von Hanoi - Iterator Java Basics - Anfänger-Themen 50
R Türme von Hanoi mit beliebiger Startposition Java Basics - Anfänger-Themen 5
G Verständnisproblem Türme von Hanoi Java Basics - Anfänger-Themen 4
X Türme von Hanoi - Iterativ Java Basics - Anfänger-Themen 8
T Rekursiver Algorithmus: Türme von Hanoi Java Basics - Anfänger-Themen 8
H Quicksort und Rekursiv: Türme von Hanoi Java Basics - Anfänger-Themen 9
X Turm von Haoi - 4 Scheiben 4 Türme Java Basics - Anfänger-Themen 11
P Hanoi Java Basics - Anfänger-Themen 1
R Hanoi rekursiv lösen Problem Java Basics - Anfänger-Themen 1
E Hanoi-Varianten rekursiv Java Basics - Anfänger-Themen 2
P Hanoi rekursiv zu iterativ umbauen Java Basics - Anfänger-Themen 20
F Methoden Hanoi - Anzahl der Bewegungen Java Basics - Anfänger-Themen 8
kulturfenster Probleme mit Hanoi Java Basics - Anfänger-Themen 3
B Kann Quellcode von "Hanoi" nicht verstehen. Bitte Java Basics - Anfänger-Themen 4
kulturfenster Hanoi Java Basics - Anfänger-Themen 28
D Hanoi Java Basics - Anfänger-Themen 6
L Hanoi II : Rekursiviker gesucht Java Basics - Anfänger-Themen 22
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
V Die die aktuelle Größe zusätzlich in einem Label angezeigt wird Java Basics - Anfänger-Themen 11
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
H Erste Schritte Aktuelle Uhrzeit auslesen Java Basics - Anfänger-Themen 64
F Aktuelle Stunde, Minute usw. auslesen Java Basics - Anfänger-Themen 10
D Erste Schritte Einsteigerfrage - Überblick über aktuelle Java-Technologien Java Basics - Anfänger-Themen 6
J FileOutputStream aktuelle Speicher Pfad ausgeben Java Basics - Anfänger-Themen 13
N aktuelle Datum Mikrosekunden genau bestimmen Java Basics - Anfänger-Themen 8
RySa Input/Output aktuelle größe des BufferedWriters ? Java Basics - Anfänger-Themen 5
M LinkedList aktuelle position Java Basics - Anfänger-Themen 3
D JEditorPane aktuelle Zeile auslesen Java Basics - Anfänger-Themen 4
A Aktuelle Parameter Java Basics - Anfänger-Themen 4
B aktuelle Position einer JTextArea ermitteln Java Basics - Anfänger-Themen 6
G TrayIcon: Wie aktuelle Position des Icons erhalten? Java Basics - Anfänger-Themen 2
S Aktuelle Zeile bekommen Java Basics - Anfänger-Themen 2
G Aktuelle Heap-Größe auslesen? Java Basics - Anfänger-Themen 3
T Aktuelle Datum Java Basics - Anfänger-Themen 4
M Datei ins aktuelle Verzeichnis speichern Java Basics - Anfänger-Themen 5
N ins aktuelle fenster schreiben. Java Basics - Anfänger-Themen 6
N Aktuelle Jahreszahl auslesen? Java Basics - Anfänger-Themen 3
R Woher bekomme ich das aktuelle Jahr oder auch Datum? Java Basics - Anfänger-Themen 4
T aktuelle Position in einer Datei Java Basics - Anfänger-Themen 4
R Aktuelle URL herausfinden Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben