Java ArrayIndexOutOfBoundsException(扫雷)

By simon at 2018-02-07 • 0人收藏 • 59人看过

我试图做一个简单的扫雷艇,在n * n的地方种植n * n / 3个地雷 板。地雷标有*,空格标记为0.(它的确如此 不是作为一个游戏的功能:我正在努力做出“答题纸” 扫雷艇)请注意临屋区我没有使用任何方法。 我在第23行经常发生错误:

线程“主”java.la中的异常ng.ArrayIndexOutOfBoundsException:15 我已经尝试了几个小时来解决这个问题,但似乎没有工作。任何人都可以 指出what是错的,我该如何修复我的代码?谢谢。

import java.util.Scanner;
public class Minesweeper {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        char board[][] = new char [n][n]; // makes board of n*n
        int a, b;
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                board[i][j] = '0';
            }
        }
        for (int i = 0; i < n * n / 3; i++) { // '*' is a mine
            a = (int)(Math.random() * (n - 1) + 1.0);
            b = (int)(Math.random() * (n - 1) + 1.0);
            board[a][b] = '*';
        }

        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                for (int k = i - 1; k <= i + 1 && k >= 0 && k <= n; k++) {
                    for (int l = j - 1; l <= j + 1 && l >= 0 && l <= n; l++) {
                        if (board[k][l] == '*' && !(k == i && l == j)) {
                            board[i][j] = (char)(Character.getNumericValue(board[i][j]) + 1);
                        }
                    }
                }
            }
        }

        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                System.out.println(board[i][j]);
            }
        }
    }

}

1 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

           for (int k = i - 1; k <= i + 1 && k >= 0 && k <= n; k++) {
                for (int l = j - 1; l <= j + 1 && l >= 0 && l <= n; l++) {
它应该是k <n和l <n。 n已经超出了界限。 也
    for (int i = 0; i < n * n / 3; i++) { // '*' is a mine
        a = (int)(Math.random() * (n - 1) + 1.0);
        b = (int)(Math.random() * (n - 1) + 1.0);
        board[a][b] = '*';
    }
看来不对,我觉得应该是
    for (int i = 0; i < n * n / 3; i++) { // '*' is a mine
        a = (int)(Math.random() * n);
        b = (int)(Math.random() * n);
        board[a][b] = '*';
    }

登录后方可回帖

Loading...