2017-01-23 15 views
-3

Ich versuche, die berüchtigte "Knights Tour" zu vervollständigen. Wo der Ritter muss sich um die Gesamtheit eines Schachbrettes bewegen, bis es keine Optionen mehr hat oder das Brett vervollständigt. Ich bekomme unerwünschte außerhalb der Grenzen Fehler auf meinem "Bewegung" Code und kann das Problem nicht herausfinden. Alle Hilfe wird geschätzt!Knights Tour Ausgabe

import java.util.*; 
public class Tour { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int[][] board = new int[8][8]; 

    int rowpos = 1, vertpos = 1; 
    board[0][0] =1; 
    Random rand = new Random(); 
    int count = 1; 
    for (int v=1; v<0;count++){ 

    int gen = rand.nextInt(8); 

    if (gen == 0 && board[rowpos + 1][vertpos + 2] == 0){ 
     rowpos = rowpos + 1; 
     vertpos = vertpos +2; 
     board[rowpos][vertpos]=count; 
    } 
    if (gen == 1 && board[rowpos - 1][vertpos - 2] == 0){ 
     rowpos = rowpos - 1; 
     vertpos = vertpos -2; 
     board[rowpos][vertpos]=count; 
    } 
    if (gen == 2 && board[rowpos - 1][vertpos + 2] == 0){ 
     rowpos = rowpos - 1; 
     vertpos = vertpos +2; 
     board[rowpos][vertpos]=count; 
    } 
    if (gen == 3 && board[rowpos + 1][vertpos - 2] == 0){ 
     rowpos = rowpos + 1; 
     vertpos = vertpos -2; 
     board[rowpos][vertpos]=count; 
    } 
    if (gen == 4 && board[rowpos + 2][vertpos + 1] == 0){ 
     rowpos = rowpos + 2; 
     vertpos = vertpos +1; 
     board[rowpos][vertpos]=count; 
    } 
    if (gen == 5 && board[rowpos + 2][vertpos - 1] == 0){ 
     rowpos = rowpos + 2; 
     vertpos = vertpos -1; 
     board[rowpos][vertpos]=count; 
    } 
    if (gen == 6 && board[rowpos - 2][vertpos - 1] == 0){ 
     rowpos = rowpos - 1; 
     vertpos = vertpos -1; 
     board[rowpos][vertpos]=count; 
    } 
    if (gen == 7 && board[rowpos -2 ][vertpos +1] == 0){ 
     rowpos = rowpos -2; 
     vertpos = vertpos +1; 
     board[rowpos][vertpos]=count; 
    } 
    else{ 
     System.out.print("You moved " +count +" times."); 
     break; 
    } 

} 
} 

} 
+3

Verwenden Sie einen Debugger oder drucken Sie die Werte aus, um zu sehen, wo Sie sich außerhalb der Grenzen befinden. So lernst du, deinen Code zu reparieren. – Kayaman

+0

Code ist unvollständig, zumindest einen Schnipsel, der minimal ist und bitte kompilieren. –

+0

Dies ist der vollständige Code. Ich kann einfach nicht herausfinden, warum es nicht funktioniert – ProgrammingKid

Antwort

0

Es scheint, dass Sie Positionen überprüfen, auch wenn es außerhalb der Platine ist. Zum Beispiel die folgende Zeile

if (gen == 0 && board[rowpos + 1][vertpos + 2] == 0) ... 

wird eine Ausnahme, wenn vertpos >= 6 oder rowpos == 7, beide sind möglich werfen. Ebenso wirft

if (gen == 1 && board[rowpos - 1][vertpos - 2] == 0) ... 

eine Ausnahme, wenn rowpos == 0 oder wenn vertpos <= 1.

Sie müssen diese Fälle behandeln, indem Sie überprüfen, ob sich eine Position innerhalb der Karte befindet, bevor Sie prüfen, ob die Position bereits besucht wurde.

Darüber hinaus sollten Sie versuchen, Ihren Code zu refaktorieren, damit er sich weniger wiederholt. Wenn Sie mehr Hilfe benötigen, ist https://codereview.stackexchange.com/ vielleicht ein guter Ort, aber gehen Sie so weit wie möglich alleine vor, bevor Sie Hilfe von anderen bekommen.