我试图创建像模拟一样的扫雷,当0清除且X是我的时,用户输入地雷数量并使用随机生成器将其放置在2D数组中。当我运行它的网格打印,但我得到java.lang.ArrayIndexOutOfBoundsException:4并不知道如何解决它。我以前从未使用过二维数组。
import java.util.Scanner;
import java.util.Random;
public class Minesweeper {
private static int count = 0; /* used to count the number of mines */
public static void main ( String [] args) {
int r = 12;
int c = 12;
int ground [][] = new int [r][c]; //2D array 12 x 12
int a = 0; // variable to print 0's as an integer instead of a string
Scanner sc=new Scanner(System.in); // scanner for the user to input number of mines
System.out.print("Enter mines: ");
Random myRandom = new Random();
int N; // N is the variable for the number of mines
N = sc.nextInt(); // scanner to input the number
for (int k = 0; k < ground.length; k++) { // nested loop to print a 12 x 12 grid
for (int j = 0; j < ground.length; j++) {
System.out.print(" " + a + " " ); // prints the 0s
}
System.out.println();
}
while(count <= N) { // loop to count the mine numbers the user chose
/* if count < N, we need to put more mines */
do {
r = myRandom.nextInt(12); // generate the mines in random places
c = myRandom.nextInt(12);
} while(mineOrNot(r, c) == false);
count += 1;// count to place the right amount of mines
}
}
// function to make sure no 2 mines are in the same location
public static boolean mineOrNot(int r, int c) {
int ground [][] = new int [r][c];
// if theres no mines its ok to place one
if(ground[r][c] == 0) {
ground[r][c] = 1; // it is ok, put a mine at here
return true;
}
else
return false;
}
}
答案 0 :(得分:0)
由于我不是用Java编写代码,因此我只能告诉您为何会收到此错误的基础知识。它基本上是开始使用数组的权利,甚至有经验的程序员在某些情况下也会不时遇到这个问题。
基本上,您正在尝试访问此阵列的一部分,而该部分在您为其设置的范围内不存在。
E.G。您正在访问元素13,null并尝试使用它,从而导致错误。
如果可以(不要使用Java,我认为Oracle具有此功能),请插入一个断点并逐步完成每次迭代,并尝试精确计算阵列上的滴答。
它应该保持在0到11之间,因为Java中的数组索引从0开始。
因此 1 - 12 单元格成为索引
0 - 11 。