爪哇骑士巡回赛
我试图完成臭名昭著的“骑士之旅”,骑士必须在棋盘上移动,直到没有更多选项或完成棋盘。我的“移动”代码中出现了不必要的越界错误,无法解决问题。感谢您的帮助
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;
}
}
}
}
# 1 楼答案
看起来你在检查位置,即使在董事会之外。例如,下面一行
如果
vertpos >= 6
或rowpos == 7
都有可能,则将引发异常。同样地如果
rowpos == 0
或vertpos <= 1
,则引发异常你需要先确认某个职位在董事会内,然后再检查该职位是否已被访问,从而处理这些情况
此外,您应该尝试重构代码,以减少重复。如果你需要更多的帮助,https://codereview.stackexchange.com/可能是一个好去处,但在获得他人的帮助之前,一定要尽可能独自完成