我正在尝试将一个String数组放入对角线的2d char数组中。我有一个问题产生我的随机数范围,以便它将在我的2D数组的索引中。我的代码有效,但有时它会破坏,给出“java.lang.ArrayIndexOutOfBoundsException:60”。
useWords是用户输入的String数组,puzzleBoard是60行30列的二维数组。
for (int i = 0; i < userWords.length; i++) {
int r = rand.nextInt(60);
int c = rand.nextInt(puzzleBoard[r].length - userWords[i].length());
for (int j = 0; j < userWords[i].length(); j++) {
puzzleBoard[r+j][c+j] = userWords[i].charAt(j); // -j-j = dia right backward || +j+j= dia right forward || -j+j dia forward || +j-j dia backward
}
}
如果代码没有中断,这是输出。
鉴于您的代码:
1 for (int i = 0; i < userWords.length; i++) {
2 int r = rand.nextInt(60);
3 int c = rand.nextInt(puzzleBoard[r].length - userWords[i].length());
4 for (int j = 0; j < userWords[i].length(); j++) {
5 puzzleBoard[r+j][c+j] = userWords[i].charAt(j); // -j-j = dia right backward || +j+j= dia right forward || -j+j dia forward || +j-j dia backward
6 }
7 }
8 }
第5行中r + j
的值很容易变得大于59,因为r
本身已经是59.这样,你的数组将变得越界,因此java.lang.ArrayIndexOutOfBoundsException: 60
。
你可以使用(r + j) % 60
作为解决方案继续在董事会的左侧。