【问题标题】:Array generation - Regular, or 2D?数组生成 - 常规还是 2D?
【发布时间】:2021-07-25 20:21:17
【问题描述】:

我会尽量保持简短和简洁。 我正在做一个项目,但我遇到了一个相当早的减速带。该项目涉及创建 10 个随机生成的整数数组(从 0 到 99),其中每个数组都有不同数量的元素(n)。在我们有几个整数池可以使用之后,我需要在所述数组上制定不同的排序算法——但我什至还没有做到那么远。 我已经成功地使 for 循环生成了一个数组,其中每个 int 都是随机的。然后循环以“n”的新值重新开始,并生成另一个随机整数数组。 我的代码如下:

import java.util.Arrays;

public class Testing {

    public static void arrayGenerator() {
        int[] elements = { 100, 250, 500, 750, 1000, 1250, 2500, 3750, 5000, 6250 }; // 10 different values for 'n' to work with.

        int n; // Number of elements per array.
        int i; // Index of n, ie. 0 = 100, 1 = 250, 2 = 500, etc.
        int k; // Index of element in generated array.
    
//Generate a separate array of random numbers for each value of 'n'.
                for (i = 0; i < elements.length; i++) {
                    n = elements[i];
                    int[] sortableArray = new int[n];

//Populate each array with random numbers ranging from 0 to 99.     
                    for (k = 0; k < n; k++) {
                        sortableArray[k] = (int) (Math.random() * 100);
                    }
                    System.out.println(Arrays.toString(sortableArray));
                
            }
    }

    public static void main(String[] args) {
        Testing arrGen = new Testing();
        arrGen.arrayGenerator();
    }
}

'System.out.println(Arrays.toString(sortableArray))' 只是为了查看是否正在生成数字(并且正在生成正确数量的数字)。这就是我停下来的地方。如果我理解正确,每个后续数组都会覆盖前一个数组 - 所以到最后我没有 10 个数组,我有一个,其中 n = 5000。

我研究过使用 2D 数组、ArrayList 或 Map,但我的努力是徒劳的(即,我不太确定如何去做)。当我尝试形成 2D数组,我会尝试使用“(int)(Math.random()* 100)”来设置[k]的值,我会一直得到NullPointExceptionErrors。这意味着我做错了什么,但我不确定是什么。 在我的项目的后期,我需要能够获取所有这些数组,对它们进行排序(单独),记下对它们进行排序所花费的时间……等等。但现在我一开始就无法存储它们. 我确信解决方案很简单,但我最近被难住了,我似乎无法找到解决方案。如果有人可以指导我找到最佳解决方案,我将不胜感激! 感谢阅读!

编辑 - 为了更加清楚,这是我使用 2D 数组的微弱尝试(替换上面代码中的两个 for 循环):

for (i = 0; i < elements.length; i++) {
                    n = elements[i];

//Populate each array with random numbers ranging from 0 to 99.     
                    for (k = 0; k < n; k++) {
                        int[][] sortableArray = new int[i][n];
                        sortableArray[i][k] = (int) (Math.random() * 100);

然而,结果是这样的:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at ie.gmit.dip.Testing.arrayGenerator(Testing.java:22)
    at ie.gmit.dip.Testing.main(Testing.java:32)

错误指向此行的位置:

sortableArray[i][k] = (int) (Math.random() * 100);

我被难住了。非常感谢任何和所有的见解! 谢谢。

【问题讨论】:

    标签: java arrays 2d


    【解决方案1】:

    只需在 for 循环结束之前将数组存储在列表中即可:

    import java.util.Arrays;
    
    public class Testing {
    
        public static void arrayGenerator() {
            int[] elements = { 100, 250, 500, 750, 1000, 1250, 2500, 3750, 5000, 6250 }; // 10 different values for 'n' to work with.
    
            int n; // Number of elements per array.
            int i; // Index of n, ie. 0 = 100, 1 = 250, 2 = 500, etc.
            int k; // Index of element in generated array.
        
    //Create a list to store all your arrays
            LinkedList<int[]> listOfArrays = new LinkedList<int[]>();
    
    
    //Generate a separate array of random numbers for each value of 'n'.
                    for (i = 0; i < elements.length; i++) {
                        n = elements[i];
                        int[] sortableArray = new int[n];
    
    //Populate each array with random numbers ranging from 0 to 99.     
                        for (k = 0; k < n; k++) {
                            sortableArray[k] = (int) (Math.random() * 100);
                        }
    
                        listOfArrays.add(sortableArray);
    
                        System.out.println(Arrays.toString(sortableArray));
                    
                }
        }
    
        public static void main(String[] args) {
            Testing arrGen = new Testing();
            arrGen.arrayGenerator();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2013-10-27
      相关资源
      最近更新 更多