骑士旅游问题
问题描述:
我正在尝试完成臭名昭着的“骑士旅游”骑士必须围绕整个棋盘移动,直到它没有更多选项或完成棋盘。我在我的“机芯”代码中出现不必要的出界错误,并且无法找出问题所在。所有帮助表示赞赏!骑士旅游问题
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;
}
}
}
}
答
看来你正在检查职位,即使有董事会之外。例如,下面一行
if (gen == 0 && board[rowpos + 1][vertpos + 2] == 0) ...
将抛出一个异常,如果vertpos >= 6
或rowpos == 7
,这两者是可能的。同样地,
if (gen == 1 && board[rowpos - 1][vertpos - 2] == 0) ...
抛出异常rowpos == 0
或者如果vertpos <= 1
。
您需要处理这些情况,方法是在检查位置是否已被访问之前,验证职位是否在董事会内。
此外,你应该尝试重构你的代码,使其重复性较低。如果您需要更多的帮助,https://codereview.stackexchange.com/可能是一个很好的去处,但是在得到别人的帮助之前,一定要尽可能地完成它。
使用调试器或打印出值以查看出界的位置。这就是你学会修复你的代码的方法。 – Kayaman
代码是不完整的,至少发布一个很小的代码片段,请编译。 –
这是完整的代码。我只是不知道为什么它不起作用 – ProgrammingKid