-6

当我测试运行我的程序时,我似乎得到了一个错误,上面写着 java.lang.ArrayIndexOutOfBoundsException: -1

请问谁能给我一些关于如何解决这个问题的建议?

class MineFinderModel {
public static int MINE_SQUARE = 10;
public static int EMPTY_SQUARE = 0;

int num_of_cols;
int num_of_rows;
int[][] the_minefield;

public MineFinderModel(int n_cols, int n_rows) {
    num_of_rows = n_rows;
    num_of_cols = n_cols;
    the_minefield = new int[num_of_cols][num_of_rows];
}

public boolean addMine(int thisCol, int thisRow) {
    if (thisCol >= num_of_cols || thisRow >= num_of_rows)
        return false;
    if (the_minefield[thisCol][thisRow] == MINE_SQUARE)
        return false;
    the_minefield[thisCol][thisRow] = MINE_SQUARE;
    return true;
}

public int getValue(int thisCol, int thisRow) {
    if (thisCol >= num_of_cols || thisRow >= num_of_rows)
        return 0;
    return the_minefield[thisCol][thisRow];
}

public void addMinesToCorners() {
    the_minefield[0][0] = MINE_SQUARE;
    the_minefield[0][num_of_rows -1] = MINE_SQUARE;
    the_minefield[num_of_cols - 1][0] = MINE_SQUARE;
    the_minefield[num_of_cols - 1][num_of_rows - 1] = MINE_SQUARE;
}

}

4

3 回答 3

1

我猜它应该在“addMinesToCorners()”函数中,因为你没有测试边界。尝试在您周围放置一些变量怎么样?

if(num_of_cols == 0)
if(num_of_rows == 0)

在初始化时,这等于“0”,然后“0 - 1”给出“-1”。因此错误。

希望这可以帮助 !

于 2013-03-13T15:45:32.407 回答
0

数组索引为零,因此您的检查不正确,例如,如果 num_of_cols 为 10,则最后一个位置将为 9,但如果您将 10 作为 thisCol 传入,您的检查将通过,因为它检查的是初始化值而不是数组的长度. 尝试将您的测试更改为

if (thisCol < 0  thisCol >= (num_of_cols - 1) || thisRow < 0 || thisRow >= num_of_rows - 1))
于 2013-03-13T15:50:31.383 回答
0

您的所有方法都有最大值检查,但它们都没有检查 thisRow 和 thisCol 中的负值,因此如果这两个方法的任何参数为负,addMine() 和 getValue() 将抛出 java.lang.ArrayIndexOutOfBoundsException . 您可以添加一个条件,如`

if (thisCol >= num_of_cols || thisCol < 0
            || thisRow >= num_of_rows || thisRow <0)

 return false
于 2013-03-13T16:07:09.520 回答