Springerproblem-Implementierung funktioniert nicht richtig

boschl2000

boschl2000

Neues Mitglied
Hi Leute,
ich bin neu hier im Forum und hoffe mal, dass ihr mir vielleicht weiterhelfen könnt! :)
Ich möchte alle Lösungen des Springerproblems mit einem Algorithmus finden.
Orientiert habe ich mich am Backtracking, hier ist erstmal mein Code:

Springer:
import java.util.ArrayList;
import java.util.List;

public class Knight {
    private Square pos;

    public Knight(Square pos) {
        this.pos = pos;
    }

    public List<Square> getPossibleMoves(Chessboard chessboard) {
        List<Square> reachableSquares = new ArrayList<Square>();
        //Nach oben
        int row = pos.getRow();
        int column = pos.getColumn();
        Square[][] matrix = chessboard.getBoardmatrix();
        int size = chessboard.getSize();
        //Nach oben
        if (row - 2 >= 0) {
            //oben links
            if (column - 1 > 0) {
                reachableSquares.add(matrix[row - 2][column - 1]);
            }
            //oben rechts
            if (column + 1 < size) {
                reachableSquares.add(matrix[row - 2][column + 1]);
            }
        }
        //Nach links
        if (column - 2 >= 0) {
            //links oben
            if (row - 1 >= 0) {
                reachableSquares.add(matrix[row - 1][column - 2]);
            }
            //links unten
            if (row + 1 < size) {
                reachableSquares.add(matrix[row + 1][column - 2]);
            }
        }
        //Nach unten
        if (row + 2 < size) {
            //unten links
            if (column - 1 >= 0) {
                reachableSquares.add(matrix[row + 2][column - 1]);
            }
            //unten rechts
            if (column + 1 < size) {
                reachableSquares.add(matrix[row + 2][column + 1]);
            }
        }
        //Nach rechts
        if (column + 2 < size) {
            //rechts oben
            if (row - 1 >= 0) {
                reachableSquares.add(matrix[row - 1][column + 2]);
            }
            //rechts unten
            if (row + 1 < size) {
                reachableSquares.add(matrix[row + 1][column + 2]);
            }

        }

        return reachableSquares;
    }

    public void move(Square square) {
        this.pos = square;
    }

    public Square getPos() {
        return pos;
    }
}


Schachbrett:
public class Chessboard {
    private Square[][] boardmatrix;
    private final int size;

    public Chessboard(int size) {
        this.size = size;
        createBoardmatrix();
    }

    public void createBoardmatrix() {
        boardmatrix = new Square[size][size];
        for (int row = 0; row < size; row++) {
            for (int column = 0; column < size; column++) {
                boardmatrix[row][column] = new Square(row, column, size);
            }
        }
    }
    public void printMatrix(){
        for (int row = 0; row < size; row++) {
            System.out.println("\n");
            for (int column = 0; column < size; column++) {
            System.out.print(boardmatrix[row][column] + "\t");
            }
        }
    }

    public Square[][] getBoardmatrix() {
        return boardmatrix;
    }

    public int getSize() {
        return size;
    }
}
Schachfeld:
public class Square {
    private final int row;
    private final int outputrow;
    private final int column;

    public Square(int row, int column, int size) {
        this.row = row;
        this.column = column;
        this.outputrow=size-row;
    }


    public int getColumn() {
        return column;
    }

    public int getRow() {
        return row;
    }


    @Override
    public String toString(){
        String alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        StringBuilder output=new StringBuilder();
        output.append(alphabet.charAt(column))
                .append(outputrow);
        return output.toString();
    }
}

Die (leider nicht funktionierende) Simulator-Klasse:
import java.util.ArrayList;
import java.util.List;

public class Simulator {
    Chessboard chessboard;
    Knight knight;
    ArrayList<Square> solution;

    public Simulator(int size, Square pos) {
        this.chessboard = new Chessboard(size);
        this.knight = new Knight(chessboard, pos);
        solution = new ArrayList<>();
        for (int i = 0; i < chessboard.getSize() * chessboard.getSize(); i++) {
            solution.add(null);
        }
        System.out.println(solution.size());
        int ebene = 0;
        simulate(ebene);
    }
    public void simulate(int depth) {
        //Fuer die erste Iteration
        if(depth==0){
            solution.set(depth,knight.getPos());
        }
        //falls alle Felder besucht sind
        if (depth == chessboard.getSize() * chessboard.getSize() - 1) {
            for (Square square : solution) {
                System.out.print(square + " ");
            }
            System.out.println("\n");
        } else {
            List<Square> moves = knight.getPossibleMoves(chessboard);
            //mache jeden moeglichen Zug
            for (Square move : moves) {
                //wenn Feld noch nicht besucht wurde
                if (!solution.contains(move)) {
                    //naechste Stufe mit den erreichbaren Feldern
                    solution.set(depth + 1, move);
                    knight.move(move);
                    simulate(depth + 1);
                    //rueckgaengig machen, um alle Lsg. zu finden
                    for(int i=0;i<solution.size();i++){
                        if(i>=depth+1){
                            solution.set(i,null);
                        }
                    }
                }
            }
            //falls keine Zuege mgl. sind Feld entfernen
            solution.set(depth, null);
            //wieder zurueck gehen
            knight.move(solution.get(depth-1));
        }
    }
}

In der Main-Methode habe ich
Java:
Simulator simulator=new Simulator(6,square1);
Aufgerufen.
Es gibt eine Ausgabe, aber das Programm beendet sich nicht und ruft die Lösungen mehrmals auf, bevor sich etwas verändert.
Vielen Dank schonmal, ich freue mich über jede Idee!
LG ^^
 
B

Barista

Top Contributor
Du bist Dir hoffentlich bewusst, dass Code-Analyse mehr Arbeit macht als selbst schreiben.

Ich empfehle Dir, eine konkrete, abgegrenzte Frage zu stellen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
L rotateLeft implementierung Allgemeine Java-Themen 2
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Mutable objects und Implementierung von ChangeEvents Allgemeine Java-Themen 5
W Queue Implementierung Allgemeine Java-Themen 6
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
F Implementierung von Teilprogrammen [Java|Python] Allgemeine Java-Themen 7
I TimSort - Sortieralgorithmus - Erklärung und Pseudocode - Implementierung Allgemeine Java-Themen 2
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
ruutaiokwu burstsort-implementierung in java? Allgemeine Java-Themen 2
D Implementierung einer Mehrsprachigkeit, wichtig ? Allgemeine Java-Themen 5
D Implementierung einer Rechteverwaltung Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
R "Countdown" Implementierung Allgemeine Java-Themen 5
K A*-Implementierung flexibler machen Allgemeine Java-Themen 4
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
S BlueJ Cäsar-Implementierung Allgemeine Java-Themen 6
S Implementierung Programmneustart Allgemeine Java-Themen 10
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
G Implementierung einer Kommunikation Allgemeine Java-Themen 7
S Implementierung einer PluginArchitektur Allgemeine Java-Themen 5
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
R Intervall-Implementierung mit selbstgebauter LinkedList Allgemeine Java-Themen 7
J Best Practice für implementierung von equals(...) Allgemeine Java-Themen 7
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
V Wie finde ich die konkrete Implementierung? Allgemeine Java-Themen 8
G Implementierung vom AKS-Test Allgemeine Java-Themen 11
R software implementierung Allgemeine Java-Themen 3
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
K Design / Implementierung Allgemeine Java-Themen 5
B jre browser implementierung ? Allgemeine Java-Themen 4
B Elegantere Lösung bei der Implementierung eines Interfaces Allgemeine Java-Themen 2
G Klasse Queue Implementierung in Java Allgemeine Java-Themen 4
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
Lukas2904 Wie funktioniert ein KeyLogger? Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
I Wieso funktioniert das nich? Allgemeine Java-Themen 5
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
A Mp3 Player funktioniert nicht Allgemeine Java-Themen 0
X JNA funktioniert nicht mehr Allgemeine Java-Themen 4
bueseb84 FolderWatcher mit WatchService funktioniert nur bedingt Allgemeine Java-Themen 5
Drachenbauer Division mit Int funktioniert nicht Allgemeine Java-Themen 3
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Tesseract-OCR 4.0 unter Linux funktioniert nicht Allgemeine Java-Themen 3
J Wie konkret funktioniert das Modulsystem unter Java 11? Allgemeine Java-Themen 4
J Neuronales Netz funktioniert mal und mal nicht. Allgemeine Java-Themen 3
T Umlaute in Eclipse einlesen funktioniert nicht Allgemeine Java-Themen 16
A Methodenaufruf funktioniert nicht richtig Allgemeine Java-Themen 5
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
J FTPSClient funktioniert nicht Allgemeine Java-Themen 4
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
M Operatoren Warum funktioniert diese überprüfung nicht? Allgemeine Java-Themen 7
R jar-Datei funktioniert nicht Allgemeine Java-Themen 2
E Open Declaration Funktioniert nicht Allgemeine Java-Themen 0
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
RalleYTN requires transitive funktioniert nicht? Allgemeine Java-Themen 7
R Bruteforce hashes mit multithreading. Funktioniert das so? Allgemeine Java-Themen 0
P Best Practice Wieso funktioniert der Modulo - Operator nicht? Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
J Exclude funktioniert nicht Allgemeine Java-Themen 2
K .jar funktioniert nicht vollständig Allgemeine Java-Themen 1
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
O Fahrenheit/Celsius Converter funktioniert nicht Allgemeine Java-Themen 2
M Serialisierung funktioniert nicht Allgemeine Java-Themen 9
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
J Arrays auf gleichheit untersuchen funktioniert nicht Allgemeine Java-Themen 11
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
U PersistenceManager.createEntityManager funktioniert nicht Allgemeine Java-Themen 3
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
JG12111989 Auswertung von Fragebogen funktioniert nicht! Allgemeine Java-Themen 7
M Primzahlberechnung funktioniert nicht. Allgemeine Java-Themen 4
A JFreeChart funktioniert nicht :( Allgemeine Java-Themen 6
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
F Datei einlesen funktioniert nicht Allgemeine Java-Themen 3
A Debugger im Java-Editor funktioniert nicht Allgemeine Java-Themen 5
B DB-Zugriff einer Webanwendung funktioniert nicht mit Java 7 Allgemeine Java-Themen 2
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
F JTextField funktioniert nicht Allgemeine Java-Themen 6
Athena Programm funktioniert nur beim Debugging korrekt, sonst nicht. Allgemeine Java-Themen 1

Ähnliche Java Themen


Oben