有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

爪哇骑士巡回赛

我试图完成臭名昭著的“骑士之旅”,骑士必须在棋盘上移动,直到没有更多选项或完成棋盘。我的“移动”代码中出现了不必要的越界错误,无法解决问题。感谢您的帮助

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) 个答案

  1. # 1 楼答案

    看起来你在检查位置,即使在董事会之外。例如,下面一行

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

    如果vertpos >= 6rowpos == 7都有可能,则将引发异常。同样地

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

    如果rowpos == 0vertpos <= 1,则引发异常

    你需要先确认某个职位在董事会内,然后再检查该职位是否已被访问,从而处理这些情况

    此外,您应该尝试重构代码,以减少重复。如果你需要更多的帮助,https://codereview.stackexchange.com/可能是一个好去处,但在获得他人的帮助之前,一定要尽可能独自完成