为2d数组创建越界的随机数行和列

问题描述 投票:0回答:1

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

java arrays random
1个回答
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.这样,你的数组将变得越界,因此java.lang.ArrayIndexOutOfBoundsException: 60

你可以使用(r + j) % 60作为解决方案继续在董事会的左侧。

© www.soinside.com 2019 - 2024. All rights reserved.