生成字符串时Java数组索引超出范围

生成字符串时Java数组索引超出范围,java,arrays,exception,random,int,Java,Arrays,Exception,Random,Int,我正在编写一个代码,在字符串中生成一些唯一的整数,我突然遇到了一个异常,我不太明白这里的问题是什么,因为我几乎完成了。现在发生了什么我不知道 这是我的密码: String[] res = new String[12]; int[] ia = {1, 6, 9}; int[] ai = {97, 79, 8}; int[] a = new int[10]; for(int i = 0; i < a.length; i++){

我正在编写一个代码,在字符串中生成一些唯一的整数,我突然遇到了一个异常,我不太明白这里的问题是什么,因为我几乎完成了。现在发生了什么我不知道

这是我的密码:

String[] res = new String[12];
        int[] ia = {1, 6, 9};
        int[] ai = {97, 79, 8};
        int[] a = new int[10];
        for(int i = 0; i < a.length; i++){
            a[i] = (ia[new Random().nextInt(3)] ^ (ai[new Random().nextInt(3)] * i));
            for(int j = 0; j < res.length; j++){
                if(a[i] >= j){
                    res[j * i] = "J:" + (a[i] * a[new Random().nextInt(10)]); //exception
                } else if(a[i] <= j){
                    res[j * i] = "J:" + (-(a[i] * a[new Random().nextInt(10)]));
                }
            }
        } 

看看i和j的最大值。您将看到res[j*i]将超过您为其分配的空间,因此,在第一次从0变为9(a.length=10)时会出现越界异常。在第二秒内,从0到11(res.length=12)


res[j*i]
中的
j*i
将超过res(12)的限制,其简单值为2和10。

数组是基于零的。您正在访问第13个元素。这段代码有很多错误,除了数组声明之外,我甚至找不到一行好的代码。@MatejSpili说的。首先,您不应该创建新的
Random()
对象。你最终会多次得到完全相同的数字。在循环的开始处创建一个循环,并对那里的所有内容使用相同的循环。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12
    at testy.main(unique.java:15)