ram*_*ssa -1 java arrays multidimensional-array
我正在用Java创建一个基于文本的扫雷游戏.如果用户为游戏板创建一个完美的正方形,游戏可以正常工作,但是如果他们输入两个不同的值,我会在将地雷添加到二维数组中时出现异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 19
at Grid.addMines(Grid.java:77)
Run Code Online (Sandbox Code Playgroud)
添加地雷(第77行是if语句):
public void addMines()
{
Random generator = new Random();
int count = 0;
while (count < numMines)
{
int x = generator.nextInt(rows);
int y = generator.nextInt(columns);
if (grid[x][y].minePresent == false)
{
grid[x][y].setCurrent("*");
grid[x][y].minePresent = true;
count++;
}
else
continue;
}
}
Run Code Online (Sandbox Code Playgroud)
这看起来很可疑:
int x = generator.nextInt(rows);
int y = generator.nextInt(columns);
Run Code Online (Sandbox Code Playgroud)
鉴于x值通常指定一列,我怀疑你想要:
int x = generator.nextInt(columns);
int y = generator.nextInt(rows);
Run Code Online (Sandbox Code Playgroud)
或者更清楚:
int column = generator.nextInt(columns);
int row = generator.nextInt(rows);
Run Code Online (Sandbox Code Playgroud)
然后一直使用:
Foo[][] grid = new Foo[rows][columns];
...
grid[row][column] = ...;
Run Code Online (Sandbox Code Playgroud)
要么:
Foo[][] grid = new Foo[columns][rows];
...
grid[column][row] = ...;
Run Code Online (Sandbox Code Playgroud)
其中任何一个都没问题,但是你的订单错误,因为你从"列/行"模型变为"x/y"模型不一致.
值得回过头来研究如何在将来诊断类似的问题.如果某些东西在两个值相同(本例中为行和列)时有效,并且在它们不同时失败,那么通常这意味着您正在使用其中一个值而不是另一个值.因此,请从错误点仔细跟踪您的代码,找出使用这些值的任何位置,并检查它们.