Generierte Dokumentation der praktischen Arbeit von Simon Tiffert


Hauptseite | Pakete | Klassenhierarchie | Alphabetische Liste | Auflistung der Klassen | Auflistung der Dateien | Klassen-Elemente

main.verarbeitung.Verarbeitung Klassenreferenz

Zusammengehörigkeiten von main.verarbeitung.Verarbeitung:

Collaboration graph
[Legende]
Aufstellung aller Elemente

Ausführliche Beschreibung

Die Klasse Verarbeitung sucht einen Weg von Rösselsprüngen in der angegebenen Matrix.

Dazu wird die Matrix übergeben, in der die einzelnen Schritte gespeichert werden.
Hier ist der Kernalgorithmus des Programms zu finden, der das Problem löst.

Version:
Revision
1.17
Autor:
Simon Tiffert

Definiert in Zeile 30 der Datei Verarbeitung.java.

Öffentliche Methoden

 Verarbeitung (Matrix matrix) throws MatrixNotInitialisedException
 Der Konstruktor speichert die Matrix und ruft die Rösselsprünge auf.


Private Methoden

boolean roesselSprung (int zaehler, int y, int x)
 Diese Funktion führt das Backtracking durch.


Private Attribute

Matrix matrix
 Feld für Matrix.


Beschreibung der Konstruktoren und Destruktoren

main.verarbeitung.Verarbeitung.Verarbeitung Matrix  matrix  )  throws MatrixNotInitialisedException
 

Der Konstruktor speichert die Matrix und ruft die Rösselsprünge auf.

Dabei wird abgefangen, ob die Rekursion erfolgreich war und ein Weg gefunden wurde.

Parameter:
matrix Zentrale Datenstruktur mit Matrix
Ausnahmebehandlung:
MatrixNotInitialisedException Matrix nicht initialisiert

Definiert in Zeile 43 der Datei Verarbeitung.java.

Benutzt main.verarbeitung.Matrix.getStartpunkt(), main.verarbeitung.Punkt.getX(), main.verarbeitung.Punkt.getY(), main.verarbeitung.Matrix.isInitialisiert, main.verarbeitung.Verarbeitung.roesselSprung() und main.verarbeitung.Matrix.setWegGefunden().

00045   {
00046     // zentrale Datenstruktur
00047     this.matrix = matrix;
00048 
00049     // Überprüft, ob die Matrix initialisiert wurde.
00050     // Wenn die Verarbeitung als Modul eingebunden wird, könnte es
00051     // dort zu Problemen kommen
00052     if (!matrix.isInitialisiert())
00053     {
00054       throw new MatrixNotInitialisedException();
00055     }
00056 
00057     // Rekursiver Aufruf des Kernalgorithmus, mit Überprüfung, ob ein 
00058     // Weg gefunden wurde
00059     if (roesselSprung(1,
00060       matrix.getStartpunkt().getY(),
00061       matrix.getStartpunkt().getX()))
00062     {
00063       // markiere den Weg als gefunden
00064       matrix.setWegGefunden();
00065     }
00066   }

Hier ist der Graph aller Aufrufe für diese Funktion:


Dokumentation der Elementfunktionen

boolean main.verarbeitung.Verarbeitung.roesselSprung int  zaehler,
int  y,
int  x
[private]
 

Diese Funktion führt das Backtracking durch.

Dabei wird über Rösselsprünge festgelegt, in welchen Richtungen das nächste Feld gesucht wird.

Parameter:
zaehler Rekursionstiefe sowie aktuelle Sprunganzahl
y y-Wert der aktuellen Position
x x-Wert der aktuellen Position
Rückgabe:
ob die Rekursion erfolgreich war

Definiert in Zeile 78 der Datei Verarbeitung.java.

Benutzt main.verarbeitung.Matrix.getFeldAnzahl(), main.verarbeitung.Matrix.getWert(), main.verarbeitung.Matrix.isInMatrix() und main.verarbeitung.Matrix.setWert().

Wird benutzt von main.verarbeitung.Verarbeitung.Verarbeitung().

00079   {
00080     // überprüfen, ob der aktuelle Punkt innerhalb der Matrix ist
00081     if (!matrix.isInMatrix(y, x))
00082     {
00083       return false;
00084     }
00085 
00086     // überprüfen, ob der aktuelle Punkt besetzt ist 
00087     if (matrix.getWert(y, x) != 0)
00088     {
00089       return false;
00090     }
00091 
00092     // setze auf die aktuelle Position den Wert von zaehler
00093     matrix.setWert(y, x, zaehler);
00094 
00095     // wenn zaehler die Maximalanzahl erreicht hat, ist die Rekursion 
00096     // fertig und kann mit true abgebrochen werden
00097     if (zaehler == matrix.getFeldAnzahl())
00098     {
00099       return true;
00100     }
00101 
00102     // Rekursionskern:
00103 
00104     // Richtung NNO - Nordnordost
00105     if (roesselSprung(zaehler + 1, y - 2, x + 1))
00106     {
00107       return true;
00108     }
00109 
00110     // Richtung ONO - Ostnordost
00111     if (roesselSprung(zaehler + 1, y - 1, x + 2))
00112     {
00113       return true;
00114     }
00115 
00116     // Richtung OSO - Ostsüdost
00117     if (roesselSprung(zaehler + 1, y + 1, x + 2))
00118     {
00119       return true;
00120     }
00121 
00122     // Richtung SSO - Südsüdost
00123     if (roesselSprung(zaehler + 1, y + 2, x + 1))
00124     {
00125       return true;
00126     }
00127 
00128     // Richtung SSW - Südsüdwest 
00129     if (roesselSprung(zaehler + 1, y + 2, x - 1))
00130     {
00131       return true;
00132     }
00133 
00134     // Richtung WSW - Westsüdwest
00135     if (roesselSprung(zaehler + 1, y + 1, x - 2))
00136     {
00137       return true;
00138     }
00139 
00140     // Richtung WNW - Westnordwest
00141     if (roesselSprung(zaehler + 1, y - 1, x - 2))
00142     {
00143       return true;
00144     }
00145 
00146     //  Richtung NNW - Nordnordost
00147     if (roesselSprung(zaehler + 1, y - 2, x - 1))
00148     {
00149       return true;
00150     }
00151 
00152     // es wurde kein Weg gefunden, somit besetze die aktuelle Position
00153     // wieder mit 0, sodass das Feld wieder als freies Feld erkannt 
00154     // wird.
00155     matrix.setWert(y, x, 0);
00156 
00157     // Es wurde keine Richtung gefunden    
00158     return false;
00159   }

Hier ist der Graph aller Aufrufe für diese Funktion:


Dokumentation der Datenelemente

Matrix main.verarbeitung.Verarbeitung.matrix [private]
 

Feld für Matrix.

Definiert in Zeile 33 der Datei Verarbeitung.java.


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei:



Documentation created with Doxygen 1.3.6 Fri May 14 11:16:00 2004