为2D数组创建超出范围的随机数行和列

时间:2019-03-16 20:05:06

标签: java arrays random

我正在尝试将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
         }
      }

这是输出如果代码没有中断。

This is the output *if* the code doesn't break

1 个答案:

答案 0 :(得分:0)

给出您的代码:

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。那样,您的数组将变得越界,因此{{1 }}。

您可以使用java.lang.ArrayIndexOutOfBoundsException: 60作为解决方案,以继续在板子的左侧。