【问题标题】:Java ArrayIndexOutOfBoundsException (Minesweeper)Java ArrayIndexOutOfBoundsException(扫雷)
【发布时间】:2018-02-06 14:06:51
【问题描述】:

我正在尝试制作一个简单的扫雷器,在 n*n 板上种植 n*n/3 个地雷。地雷用 * 标记,空格用 0 标记。(它还不能用作游戏:我正在尝试制作扫雷机的“答题纸”)并且请注意,我没有使用任何故意的方法。

我在第 23 行经常遇到错误:

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 15

我已经尝试了几个小时来解决这个问题,但似乎没有任何效果。谁能指出出了什么问题以及我应该如何修复我的代码?谢谢。

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]);
            }
        }
    }

}

【问题讨论】:

    标签: java arrays indexoutofboundsexception minesweeper


    【解决方案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

    还有

        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] = '*';
        }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2021-06-10
    • 2014-08-27
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多