2017-01-23 115 views
-3

我正在嘗試完成臭名昭着的「騎士旅遊」騎士必須圍繞整個棋盤移動,直到它沒有更多選項或完成棋盤。我在我的「機芯」代碼中出現不必要的出界錯誤,並且無法找出問題所在。所有幫助表示讚賞!騎士旅遊問題

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

使用調試器或打印出值以查看出界的位置。這就是你學會修復你的代碼的方法。 – Kayaman

+0

代碼是不完整的,至少發佈一個很小的代碼片段,請編譯。 –

+0

這是完整的代碼。我只是不知道爲什麼它不起作用 – ProgrammingKid

回答

0

看來你正在檢查職位,即使有董事會之外。例如,下面一行

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

將拋出一個異常,如果vertpos >= 6rowpos == 7,這兩者是可能的。同樣地,

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

拋出異常rowpos == 0或者如果vertpos <= 1

您需要處理這些情況,方法是在檢查位置是否已被訪問之前,驗證職位是否在董事會內。

此外,你應該嘗試重構你的代碼,使其重複性較低。如果您需要更多的幫助,https://codereview.stackexchange.com/可能是一個很好的去處,但是在得到別人的幫助之前,一定要儘可能地完成它。