我正在寻找动态数量的随机整数数组,然后将它们放入数组列表中。稍后,我想分别使用这些数组中的每一个来测试快速排序功能。我在将对象List []添加到ArrayList时遇到问题。

//Create dynamic amount of random arrays
public static ArrayList<int[]> Randomizer(int arrays, int size, int seed){
    ArrayList<int[]> Tests = new ArrayList<int[]>(arrays);


    int[] List = new int[size];
    for (int j = 0; j < arrays; j++){
        Random r = new Random(seed+j);
        for(int i = 0; i < size; i++){
            List[i] = r.nextInt(5*size);//Multiplier for how big the numbers get
            System.out.print(List[i] + ",");
        }
        System.out.println();
        Tests.add(j, List);
    }


    return Tests;
}


public static void main(String[] args) {
int tests = 5;
int size = 4;
ArrayList<int[]> Test = Randomizer(tests,size,10); //1st = Number of Tests
                                                   //2nd = Number of Digits
                                                   //3rd = seed for Randomizer
for(int i = 0; i < Test.size(); i++){
System.out.println(Test.get(i));
}
}


}

最佳答案

您的代码的问题在于,您将同一数组存储了5次到ArrayList中,因此在生成过程中进行打印时,它会打印正确的数字,但后来无法将它们取出。 for循环的每次迭代都会覆盖之前生成的值。

这是更正的代码:

private static ArrayList<int[]> randomizer(int arrays, int size, int seed){
    ArrayList<int[]> tests = new ArrayList<>(arrays);
    for (int j = 0; j < arrays; j++) {
        int[] list = new int[size];
        Random r = new Random(seed + j);
        for(int i = 0; i < size; i++) {
            list[i] = r.nextInt(5 * size); // Multiplier for how big the numbers get
        }
        tests.add(j, list);
    }
    return tests;
}

public static void main(String[] args) {
    int tests = 5;
    int size = 4;
    ArrayList<int[]> arrays = randomizer(tests, size, 10);
    for (int i = 0; i < arrays.size(); i++){
        int[] ints = arrays.get(i);
        for (int j = 0; j < ints.length; j++) {
            System.out.print(ints[j] + ",");
        }
        System.out.println();
    }
}


基本上,您需要在for循环内移动int[] list = new int[size];行,以便您实际上是在创建新的数组,而不是每次都使用相同的数组。

现在,您可以使用任何喜欢的方法替换main()方法中的打印循环,例如快速排序测试。让我知道是否仍然无法正常工作。

10-07 12:16
查看更多