Nabend,
ja ich weiß das Thema wurde hier schon bestimmt 100-mal durchgekaut, aber ich konnte in keinem Thread Antworten zu meinen Fragen finden
Die Aufgabe ist die folgende:
"Nun soll auf der zuvor implementierten Datenstruktur aufbauend ein Algorithmus programmiert
werden. Unter http://de.wikipedia.org/wiki/Türme_von_Hanoi finden Sie die Beschreibung
des umzusetzenden rekursiven Algorithmus (Randoffscher Algorithmus). Erstellen Sie eine Klasse
TuermeVonHanoi. Ihr Programm bekommt als Konsolenparameter die Anzahl der Scheiben übergeben.
Anschließend soll der rekursive Algorithmus angewandt werden, um den Turm zu verschieben. Jeder
Stab entspricht somit einem Objekt der Klasse StackHanoi. Ihr Algorithmus muss auf diesen Objekten
arbeiten und die Scheiben mittels der in der vorherigen Aufgabe implementierten Methoden bewegen
(hier erfolgt keine Ausgabe auf der Konsole!). Anschließend soll auf der Konsole ausgegeben werden,
wie viele Verschiebungen durchgeführt werden mussten. Zudem soll der Turm auf dem Zielstab
ausgegeben werden. Eine Scheibe der Länge 1 wird durch den String "/\" dargestellt, eine Scheibe
der Länge 2 durch "/\/\" usw.
Der Aufruf
java TuermeVonHanoi 4
würde folgende Ausgabe erzeugen:
Es wurden 15 Verschiebungen benoetigt um 4 Scheiben zu verschieben.
/\
/\/\
/\/\/\
/\/\/\/\"
Mit der "zuvor implementierten Datenstruktur" ist meine erste Aufgabe (von der ich mir eigentlich ziemlich sicher bin, dass sie soweit richtig ist) gemeint:
Ich versteh nur nicht ganz die Aufgabe die ich nun habe.
- Heißt das, dass ich 3 verschieden Objekte erstellen muss also quasi stab1, stab2, stab3?
- Wie soll ich den Algorithmus von Wikipedia umsetzen wenn mir Methoden wie zum Beispiel "bewege" gar nicht zur Verfügung stehen?
- Wie setze ich die Strings mit "/\" usw. um?
Danke schonmal für eure Hilfe
ja ich weiß das Thema wurde hier schon bestimmt 100-mal durchgekaut, aber ich konnte in keinem Thread Antworten zu meinen Fragen finden
Die Aufgabe ist die folgende:
"Nun soll auf der zuvor implementierten Datenstruktur aufbauend ein Algorithmus programmiert
werden. Unter http://de.wikipedia.org/wiki/Türme_von_Hanoi finden Sie die Beschreibung
des umzusetzenden rekursiven Algorithmus (Randoffscher Algorithmus). Erstellen Sie eine Klasse
TuermeVonHanoi. Ihr Programm bekommt als Konsolenparameter die Anzahl der Scheiben übergeben.
Anschließend soll der rekursive Algorithmus angewandt werden, um den Turm zu verschieben. Jeder
Stab entspricht somit einem Objekt der Klasse StackHanoi. Ihr Algorithmus muss auf diesen Objekten
arbeiten und die Scheiben mittels der in der vorherigen Aufgabe implementierten Methoden bewegen
(hier erfolgt keine Ausgabe auf der Konsole!). Anschließend soll auf der Konsole ausgegeben werden,
wie viele Verschiebungen durchgeführt werden mussten. Zudem soll der Turm auf dem Zielstab
ausgegeben werden. Eine Scheibe der Länge 1 wird durch den String "/\" dargestellt, eine Scheibe
der Länge 2 durch "/\/\" usw.
Der Aufruf
java TuermeVonHanoi 4
würde folgende Ausgabe erzeugen:
Es wurden 15 Verschiebungen benoetigt um 4 Scheiben zu verschieben.
/\
/\/\
/\/\/\
/\/\/\/\"
Mit der "zuvor implementierten Datenstruktur" ist meine erste Aufgabe (von der ich mir eigentlich ziemlich sicher bin, dass sie soweit richtig ist) gemeint:
Java:
class stackHanoi
{
String[] values; // Stab
int position; // Position der obersten Scheibe | wenn -1, dann Stab leer
public stackHanoi() // Konstruktor 1
{
position = -1;
values = new String[1];
}
public stackHanoi(int anzahlScheiben) // Konstruktor 2
{
position = -1;
values = new String[anzahlScheiben];
}
String top()
// Gibt die oberste Scheibe zurueck
{
if (position != -1)
{
return values[position];
}
System.out.println("Der Stab ist leer!");
System.exit(1);
return "";
}
void pop()
// Entfernt die oberste Scheibe
{
if (position == -1)
// Ueberprueft ob der Stab leer ist oder nicht
{
System.out.println("Der Stab ist leer!");
System.exit(1);
}
else
{
values[position] = "";
position--;
}
}
void push(String neueScheibe)
// Fuegt eine neue Scheibe hinzu
{
if (position == values.length - 1)
// Ueberprueft ob der Stab voll ist
{
System.out.println("Der Stab ist voll.");
System.exit(1);
}
if (neueScheibe.length() > values[position].length())
// Ueberprueft die Scheibe zu groß ist
{
System.out.println("Scheibe ist zu groß.");
System.exit(1);
}
if (position == -1 || neueScheibe.length() < values[position].length())
// Fuegt die Scheibe hinzu, wenn Stab leer oder die neue Scheibe kleiner ist
// als die oberste Scheibe
{
values[position+1] = neueScheibe;
position++;
}
}
int size() // Gibt die Anzahl der Scheiben zurück
{
return (position+1);
}
}
Ich versteh nur nicht ganz die Aufgabe die ich nun habe.
- Heißt das, dass ich 3 verschieden Objekte erstellen muss also quasi stab1, stab2, stab3?
- Wie soll ich den Algorithmus von Wikipedia umsetzen wenn mir Methoden wie zum Beispiel "bewege" gar nicht zur Verfügung stehen?
- Wie setze ich die Strings mit "/\" usw. um?
Danke schonmal für eure Hilfe