我想在“2 d”阵列中生成随机数但我不明白为什么我会遇到这个错误?
我的代码:
package rand;
import java.util.Arrays;
import java.util.Collections;
public class random {
public static void main( String [] args){
Integer[][] arr = new Integer[2][2];
for (int i = 0; i < arr[2].length; i++)
{
for(int j=0; j<arr[2].length;j++)
arr[i][j] = i;
}
Collections.shuffle(Arrays.asList(arr));
System.out.println(Arrays.toString(arr));
}
}
控制台出现错误:
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:2 在rand.random.main(random.java:9)
任何想法???
答案 0 :(得分:3)
您引用arr[2]
,但其大小为2
。
也就是说,一个索引的大小。
数组是从0开始的。
参考arr[1]
代替。
甚至更好,参考arr[arr.length - 1]
。
首先进行循环
for (int i = 0; i < arr[arr.length - 1].length; i++)
嵌套for循环
for(int j=0; j<arr[i].length;j++)
答案 1 :(得分:1)
错误来自对arr[2]
的访问,而只有索引0
和1
对于大小为2的数组有效(从0开始的索引)。
您的限制应该是:
i < arr.length
j < arr[i].length
在第二个循环中。作为一般规则,访问something[index]
需要0 <= index < something.length
。
你的情况有什么不对:
在第一个循环中,您可以使用something
替换arr
,索引为i
。您正在定义用于访问i
的索引arr[i]
,而不会将其限制在arr
的范围内。
在第二个循环中,您可以使用something
替换arr[i]
,索引为j
。您正在定义用于访问j
的索引arr[i][j]
,但 j
不能保证在arr[i]
范围内,因为您在arr[2]
的范围内定义它(顺便说一句,不存在)。
答案 2 :(得分:0)
for (int i = 0; i < arr.length; i++)
{
for(int j=0; j<arr[i].length;j++)
arr[i][j] = i;
}
答案 3 :(得分:0)
在java中,数组索引从0开始。在你的程序中,你试图从数组的3位置获取数据。虽然数组的大小是2.这就是你得到ArrayIndexOutOfBoundsException的原因。如果你在循环中放入1而不是2。你不会遇到任何问题。 像这样
import java.util.Arrays;
import java.util.Collections;
public class random
{
public static void main( String [] args)
{
Integer[][] arr = new Integer[2][2];
for (int i = 0; i < arr[1].length; i++)
{
for(int j=0; j<arr[1].length;j++)
{
arr[i][j] = i;
int iData=Math.random()*(int)arr[i][j];
}
}
Collections.shuffle(Arrays.asList(arr));
System.out.println(Arrays.toString(arr));
}
}
当您运行上述程序时,您将获得以下输出。
[[Ljava.lang.Integer;@19821f, [Ljava.lang.Integer;@addbf1]
按任意键继续。 。