Java 二维数组索引超出边界异常

Java 二维数组索引超出边界异常,java,android,eclipse,multidimensional-array,Java,Android,Eclipse,Multidimensional Array,我是2D数组的新手,虽然我认为我理解它,但我不确定为什么我会得到这个索引越界异常。我试着让地图大小为70x100,但仍然收到相同的错误。它似乎认为我在搜索索引1156638823,我不明白为什么。任何帮助都将不胜感激 public int rand(int i) { return new Random(i).nextInt(); } public void createMap() { map = new Grid[7][10]; for (int i = 0; i &l

我是2D数组的新手,虽然我认为我理解它,但我不确定为什么我会得到这个索引越界异常。我试着让地图大小为70x100,但仍然收到相同的错误。它似乎认为我在搜索索引1156638823,我不明白为什么。任何帮助都将不胜感激

public int rand(int i) {
    return new Random(i).nextInt();
}

public void createMap() {
    map = new Grid[7][10];
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 10; j++) {
            map[i][j] = new Grid(false, false, false, false, false, false,
                    false, false, false, false, false, false, false, false,
                    false, false);
        }
    }
    map[rand(7)][0] = new Grid(true, false, true, true, false, true, false,
            false, false, false, false, false, false, false, false, true);
    map[rand(7)][rand(10)] = new Grid(true, false, false, false, false,
            false, true, false, false, false, false, false, false, false,
            false, false);
}

您使用的
Random
构造函数错误。其中的参数是种子。不是它将生成的最大数量

您可以阅读种子是什么,例如:

如果需要它生成从0到X的数字,则需要将X提供给
nextInt
方法

new Random().nextInt(X);

您使用的
Random
构造函数错误。其中的参数是种子。不是它将生成的最大数量

您可以阅读种子是什么,例如:

如果需要它生成从0到X的数字,则需要将X提供给
nextInt
方法

new Random().nextInt(X);

您误用了
Random
。您已经调用了将初始种子设置为特定值的构造函数:
i
。但它并不限制返回的随机值

该方法返回一个随机的、不受限制的
int

您需要以下代码:

public int rand(int i) {
    return new Random().nextInt(i);
}
该方法将返回的随机整数限制在
0
i-1
的范围内。此外,无参数的
Random
构造函数每次使用系统时间生成不同的随机种子(以及不同的随机数)

Java中使用
Random
的随机数是伪随机的-它们是确定性的,但它们需要一个种子才能开始。使用相同的种子将得到相同的随机数。这就是为什么每次使用不同的种子很重要的原因,无参数的
Random
构造函数为您处理这一点


此外,每次调用
rand
对象时,您不需要创建另一个
Random
对象。您可以将其创建为类中的实例变量,只需在
rand
方法中引用即可。

您误用了
Random
。您已经调用了将初始种子设置为特定值的构造函数:
i
。但它并不限制返回的随机值

new Random().nextInt(X);
该方法返回一个随机的、不受限制的
int

您需要以下代码:

public int rand(int i) {
    return new Random().nextInt(i);
}
该方法将返回的随机整数限制在
0
i-1
的范围内。此外,无参数的
Random
构造函数每次使用系统时间生成不同的随机种子(以及不同的随机数)

Java中使用
Random
的随机数是伪随机的-它们是确定性的,但它们需要一个种子才能开始。使用相同的种子将得到相同的随机数。这就是为什么每次使用不同的种子很重要的原因,无参数的
Random
构造函数为您处理这一点

此外,每次调用
rand
对象时,您不需要创建另一个
Random
对象。您可以将其创建为类中的实例变量,并在
rand
方法中引用它。

new Random(i)。nextInt()
不会做您认为它会做的事情

new Random().nextInt(X);
你应使用:

new Random(seed).nextInt(i)
你的版本只是初始化种子,但是
nextInt()
返回整个范围内的整数,如果你想要一个更小的范围,你需要指定它,通过指定
nextInt(i)
,你将在
[0,1)
new Random(i)中得到一个值。nextInt()
不会做你认为它会做的事情

你应使用:

new Random(seed).nextInt(i)

你的版本只是初始化种子,但是
nextInt()
返回整个范围内的整数,如果你想要一个更小的范围,你需要指定它,通过指定
nextInt(i)
你将在
[0,1)

中得到一个值。你使用了错误的方法:
Random\nextInt()
。您认为您使用了,这会生成范围
0
(包括)-
(不包括)内的随机整数。
random
构造函数中的整数只是一个随机种子。

您使用了错误的方法:
random\nextInt()
。你以为你用了它,它产生了范围
0
(包括)-
bound
(不包括)内的随机整数。
random
构造函数中的整数只是一个随机种子。

我不觉得愚蠢!什么是(种子)在你的代码中?如果我不包含它,这有关系吗?不,这没有关系,在
Random()的文档中
:创建一个新的随机数生成器。此构造函数将随机数生成器的种子设置为一个很可能与此构造函数的任何其他调用不同的值。种子用于让伪随机序列从随机点开始,否则每次启动同一PRNG时,都会得到相同的结果。excellent ty!你和regettman都给出了很好的答案,所以我查了一下时间。他比你快了20秒,所以给他打绿色的对勾。非常感谢你!!别担心,我来这里不仅仅是为了提高声誉。我也是。你可以接受对你帮助最大的答案,不管是哪一个。好吧,我不觉得愚蠢!什么是(种子)在你的代码中?如果我不包含它,这有关系吗?不,这没有关系,在
Random()的文档中
:创建一个新的随机数生成器。此构造函数将随机数生成器的种子设置为一个很可能与此构造函数的任何其他调用不同的值。种子用于让伪随机序列从随机点开始,否则每次启动同一PRNG时,都会得到相同的结果。excellent ty!你和regettman都给出了很好的答案,所以我查了一下时间。他比你快了20秒,所以给他打绿色的对勾。谢谢你