-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathHanoi.java
More file actions
87 lines (78 loc) · 2.87 KB
/
Hanoi.java
File metadata and controls
87 lines (78 loc) · 2.87 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/**
* Modelliert das Spiel "Turm von Hanoi" mit drei Türmen und einer
* momentan gehaltenen Scheibe. Die Klasse verwaltet die
* internen Türme (`Turm[]`) und die aktive Scheibe (`aktiv`) und
* stellt Methoden zum Aufnehmen und Ablegen von Scheiben bereit.
* <p>
* Diese Klasse kapselt nur die Logik zur Aufnahme/Abgabe einer
* einzelnen aktiven Scheibe; Validierungsfehler werden still
* ignoriert (z.B. wenn ein ungültiger Zug versucht wird).
*/
public class Hanoi {
// Instanzvariablen
private Turm[] tuerme;
private Scheibe aktiv;
/**
* Erzeugt ein neues Hanoi-Spiel mit drei Türmen und legt
* `anzahl` Scheiben (mit absteigender Größe) auf den ersten Turm.
*
* @param anzahl die Anzahl der Scheiben, die initial auf dem
* ersten Turm liegen sollen; für jede Scheibe wird
* ein geradzahliger Wert als Größe erzeugt (z.B.
* 2,4,6,...), beginnend bei `anzahl*2`.
*/
public Hanoi(int anzahl) {
// Instanzvariable initialisieren
tuerme = new Turm[3];
for (int i = 0; i < tuerme.length; i++) {
tuerme[i] = new Turm();
}
for (int i = anzahl * 2; i >= 2; i -= 2) {
tuerme[0].scheibeAufnehmen(new Scheibe(i));
}
}
/**
* Nimmt die oberste Scheibe vom Turm `pTurm` und speichert sie als
* die aktuell aktive Scheibe (`aktiv`), falls noch keine Scheibe
* aktiv ist. Falls bereits eine aktive Scheibe vorhanden ist,
* passiert nichts.
*
* @param pTurm der Index des Turms (0..2), von dem die Scheibe
* genommen werden soll
*/
public void vonTurmNehmen(int pTurm) {
//Fuege hier deinen Code ein.
}
/**
* Legt die aktuell aktive Scheibe (`aktiv`) auf den Turm `pTurm`,
* sofern der Zug den Spielregeln entspricht (entweder ist der Ziel-
* turm leer oder die oberste Scheibe des Zielturms ist größer als
* die aktive Scheibe). Nach erfolgreichem Ablegen wird `aktiv`
* auf `null` gesetzt. Ist keine Scheibe aktiv oder der Zug ist
* ungültig, bleibt der Zustand unverändert.
*
* @param pTurm der Index des Turms (0..2), auf den die Scheibe
* gelegt werden soll
*/
public void aufTurmLegen(int pTurm) {
//Fuege hier deinen Code ein.
}
/**
* Gibt die aktuell gehaltene Scheibe zurück, oder `null`, wenn
* keine Scheibe aktiv ist.
*
* @return die aktive `Scheibe` oder `null` falls keine aktiv ist
*/
public Scheibe gibAktiveScheibe() {
return aktiv;
}
/**
* Liefert das interne Array mit den drei Türmen. Der Rückgabewert
* erlaubt es Aufrufern, den Zustand der Türme zu inspizieren.
*
* @return das `Turm[]`-Array mit genau drei Türmen
*/
public Turm[] gibTuerme() {
return tuerme;
}
}