Die Türme von Hanoi sind ein mathematisches Knobel- und Geduldsspiel. Hier finden Sie den Java-Quelltext für ein Programm, das die Lösung berechnet.

Erklärung

Alle nötigen Erklärungen finden Sie als Kommentar im Quelltext.

Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Hanoi {
	
    static int counter; // Counter für die Kontrollstruktur (Anzahl der Verlegevorgänge)
    
    static void shift(int zahlDerScheiben, int quellPlatz, int zwischenPlatz, int zielPlatz) {
    /*
     * Verlegeprogramm shift:
     * Verlegeoptionen um zahlDerScheiben vom quellPlatz mit Hilfe des
     * zwischenPlatz zum zielPlatz zu bewegen
     */
        if (zahlDerScheiben > 0) { // Bedingung: Anzahl der Scheiben muss größer 0 sein
            shift(zahlDerScheiben - 1, quellPlatz, zielPlatz, zwischenPlatz);
            // "Nimm eine Scheibe vom quellPlatz und lege sie auf den zwischenPlatz mit Hilfe des zielPlatzes"
            System.out.println("Nimm Scheibe Nummer " + zahlDerScheiben +" vom Platz " + quellPlatz + " und lege sie auf Platz " + zielPlatz);
            // Anweisung ausgeben
            shift(zahlDerScheiben - 1, zwischenPlatz, quellPlatz, zielPlatz);
            // "Nimm eine Scheibe vom zwischenPlatz und lege sie auf den zielPlatz mit Hilfe des quellPlatzes"
            counter++;
        }
    }
    
    
    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]); // Eingabe der Anzahl der Scheiben
        while(n <= 0) { // Schleife bis keine Scheiben mehr auf dem quellPlatz sind
            shift(n, 1, 2, 3);
            /*
             * Aufruf des Programms shift mit Parametern:
             * n = Eingabe = Anzahl der vorhandenen Scheiben auf dem quellPlatz
             * 1 = quellPlatz
             * 2 = zwischenPlatz
             * 3 = zielPlatz
             */
        }
        System.out.println("\r\nEs werden " + counter + " Verlegevorgänge benötigt." );
        // Ausgabe der Summe der Verlegevorgänge (Kontrollstruktur)
    }

}