Erste Schritte türme von hanoi verständnisprobleme

javaman123

Neues Mitglied
Java:
class TowerOfHanoi 
{ 
  static void move( int n, 
                    String fromPeg, String toPeg, String usingPeg ) 
  { 
    if ( n > 1 ) 
    { 
      move( n – 1, fromPeg, usingPeg, toPeg ); 
      System.out.printf( "Bewege Scheibe %d von der %s zur %s.%n", 
                         n, fromPeg, toPeg ); 
      move( n – 1, usingPeg, toPeg, fromPeg ); 
    } 
    else 
      System.out.printf( "Bewege Scheibe %d von der %s zur %s.%n", 
                         n, fromPeg, toPeg ); 
  } 
 
  public static void main( String[] args ) 
  { 
    move( 4, "Kupfersäule", "Silbersäule", "Goldsäule" ); 
  } 
}

Ausgabe:

Code:
Bewege Scheibe 1 von der Kupfersäule zur Goldsäule. 
Bewege Scheibe 2 von der Kupfersäule zur Silbersäule. 
Bewege Scheibe 1 von der Goldsäule zur Silbersäule. 
Bewege Scheibe 3 von der Kupfersäule zur Goldsäule. 
Bewege Scheibe 1 von der Silbersäule zur Kupfersäule. 
Bewege Scheibe 2 von der Silbersäule zur Goldsäule. 
Bewege Scheibe 1 von der Kupfersäule zur Goldsäule. 
Bewege Scheibe 4 von der Kupfersäule zur Silbersäule. 
Bewege Scheibe 1 von der Goldsäule zur Silbersäule. 
Bewege Scheibe 2 von der Goldsäule zur Kupfersäule. 
Bewege Scheibe 1 von der Silbersäule zur Kupfersäule. 
Bewege Scheibe 3 von der Goldsäule zur Silbersäule. 
Bewege Scheibe 1 von der Kupfersäule zur Goldsäule. 
Bewege Scheibe 2 von der Kupfersäule zur Silbersäule. 
Bewege Scheibe 1 von der Goldsäule zur Silbersäule.

Ich versteh den Code nicht so recht, leider ist es im Buch nicht erklärt.
Könnt ihr mir helfen?

Danke schon mal!

LG
 

codechaos

Mitglied
Bei den Türmen von Hanoi geht es darum n Scheiben von einer Säule zur anderen zu bewegen, wobei du eine Scheibe nur auf eine größere Scheibe legen darfst.

Du hast drei Stapel, einen Startstapel, einen Zielstapel und einen Hilfsstapel. Wenn du nun n Scheiben von Start nach Ziel verschieben willst, gehst du wei folgt vor:
Falls n = 1 ist, kannst du die Scheibe direkt auf den Stapel packen. Das ist beim else Fall in Zeile 14 abgefangen. Ansonsten verschiebe erst n-1 Scheiben vom Starstapel auf den Hilfsstapel (Zeilen 8 und 9), um dann die unterste Scheibe vom Startstapel auf den Zielstapel zu schieben (Zeile 11).

Mach dir das am besten klar, indem du das im Kopf oder auf Papier mit 3-4 Scheiben durchspielst :)
 

javaman123

Neues Mitglied
Danke für deine Antwort.

Was ich nicht verstehe wo kommt die Zahl 1 und alle weiteren Nummern der Scheiben her?
Code:
Bewege Scheibe 1 von der Kupfersäule zur Goldsäule. 
Bewege Scheibe 2 von der Kupfersäule zur Silbersäule. 
Bewege Scheibe 1 von der Goldsäule zur Silbersäule. 
Bewege Scheibe 3 von der Kupfersäule zur Goldsäule. 
Bewege Scheibe 1 von der Silbersäule zur Kupfersäule. 
Bewege Scheibe 2 von der Silbersäule zur Goldsäule. 
Bewege Scheibe 1 von der Kupfersäule zur Goldsäule. 
Bewege Scheibe 4 von der Kupfersäule zur Silbersäule. 
Bewege Scheibe 1 von der Goldsäule zur Silbersäule. 
Bewege Scheibe 2 von der Goldsäule zur Kupfersäule. 
Bewege Scheibe 1 von der Silbersäule zur Kupfersäule. 
Bewege Scheibe 3 von der Goldsäule zur Silbersäule. 
Bewege Scheibe 1 von der Kupfersäule zur Goldsäule. 
Bewege Scheibe 2 von der Kupfersäule zur Silbersäule. 
Bewege Scheibe 1 von der Goldsäule zur Silbersäule.
 
S

SlaterB

Gast
das ist doch offensichtlich der Parameter n der Methode? wenn du das nicht im Code siehst, dann ist es ja wirklich kritisch..,

von der main-Methode kommt die 4 rein, die wird auch ausgegeben, aber nicht als erstes,
durch rekursive Aufrufe kommen vorher andere Zahlen ran, n-1 usw.
 

flatpat

Mitglied
also ich checks auch nicht.
bei einer geraden anzahl scheiben fängt er an mit "links nach mitte"
bei ungeraden mit "links nach rechts". ich verstehe nicht wann das programm entscheidet wo es anfangen soll.

woher weiss mein programm seinen start- und seinen ziel-stapel?
wo bzw. wann wird links, mitte und rechts vertauscht?

kann mir jemand helfen?




Java:
public class Hanoi 
{

	static void ausgabe( int n, String von, String nach )
	{
		System.out.printf( "Scheibe %d von %s nach %s%n", n, von, nach );
	}
	static void versetzeTurm( int n, String links, String mitte, String rechts )
	{
		if ( n > 1 )
		{
			versetzeTurm( n-1, links, rechts, mitte );
			ausgabe( n, links, rechts );
			versetzeTurm( n-1, mitte, links, rechts );
		}
		else
			ausgabe( n, links, rechts );
	}
	public static void main( String[] args )
	{
		versetzeTurm( 4, "Links", "Mitte", "Rechts" );
	}
}
 
S

SlaterB

Gast
feste Posititonen und gerade/ ungerade kennt und nutzt der Algorithmus nicht,
wichtig ist die Unterscheidung von + nach + dritte Position, die in den Parametern gegeben ist,
und vom initialen Aufruf für den ganzen Ablauf bestimmt ist


die dritte Position wird als Zwischenhalt genutzt:
wenn man von A nach C 5 Scheiden verschieben will, lädt man erstmal 4 auf die dritte Position, in diesem Fall B, das verrät der Parameter,

der Witz ist, dass durch die Rekursion die Rollen tauschen,
um diese 4 Scheiben von A nach B zu bekommen verwendet man das eigentliche Ziel, C,
erstmal als dritte Zwischen-Position für den Transport von A nach B

usw. beliebig verquirrlt, aber kommt am Ende hin, egal mit wieviel Scheiben, dauert nur länger,
Beispiel auf Papier bzw. mit echten Scheiben/ Klötzchen anschauen hilft
 
Ä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
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
B Türme von Hanoi: aktuelle Belegungszustände ausgeben? Java Basics - Anfänger-Themen 2
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
L JavaFX - grundlegende Verständnisprobleme Java Basics - Anfänger-Themen 1
D Interface Verständnisprobleme von Interfaces Java Basics - Anfänger-Themen 5
gstarplayer [Verständnisprobleme] Java next(),nextLine,nextInt und parseInt! Java Basics - Anfänger-Themen 22
? Klassen Verständnisprobleme mit Klassen und Metohden Java Basics - Anfänger-Themen 5
? Klassen Verständnisprobleme mit Import Anweisungen Java Basics - Anfänger-Themen 6
J Verständnisprobleme bei Arrays Java Basics - Anfänger-Themen 3
S Verständnisprobleme wie Java Programme ablaufen Java Basics - Anfänger-Themen 6
K JNI Verständnisprobleme Java Basics - Anfänger-Themen 4
B verständnisprobleme bei Aufgabenstellung Java Basics - Anfänger-Themen 25
M Verständnisprobleme mit Klassennutzung Java Basics - Anfänger-Themen 9
c_sidi90 Hilfe bei GUI Verständnisprobleme Java Basics - Anfänger-Themen 13
A Mal wieder Verständnisprobleme Java Basics - Anfänger-Themen 3
A Code-Verständnisprobleme Java Basics - Anfänger-Themen 10
A Verständnisprobleme eines Lösungscodes Java Basics - Anfänger-Themen 9
B Objektoerientiertes Programmieren, Verständnisprobleme Java Basics - Anfänger-Themen 4
megachucky JDBC-Grundlagen: Verständnisprobleme Java Basics - Anfänger-Themen 31
S Rekursion: Verständnisprobleme Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben