繁体   English   中英

ArrayList和java.lang.OutOfMemoryError

[英]ArrayList and java.lang.OutOfMemoryError

我试图使程序创建一个初始大小为1的ArrayList并用随机数填充它。 接下来, ArrayList被清除的尺寸和ArrayList增加1,再次充满了随机数。 我希望我的程序重复这些步骤,直到ArrayList大小等于用户指定的数字为止。

因此,输出将例如:

1

3,8

6,3,7

...

ñ

到目前为止,我已经制作了:

public static void main (String args[]){

    ArrayList<Integer> al = new ArrayList<Integer>(); 
    Random rand = new Random();
    int val=1;
    int ii =1;
    while(val<400){
    for (int j = 0; j<ii;)
    {
        ii++;
        val++;
        pick = rand.nextInt(100);
        al.add(pick);
    }

    System.out.println("Contents of al: " + al);

    al.clear();
    System.out.print("Array has been cleared: " + al);
}

有什么想法使它起作用吗?

您永远不会增加j。 您正在for循环内增加ii和val,正如我认为您实际上想要在while循环中进行的那样。 请尝试下面的示例。

    ArrayList<Integer> al = new ArrayList<Integer>(); 
    Random rand = new Random();
    int val=1;
    int ii =0;
    while(val < 400){
        for (int j = 0; j<ii; j++) {
            int pick = rand.nextInt(100);
            al.add(pick);
        }
        ii++;
        val++;
        System.out.println("Contents of al: " + al);
        al.clear();
        System.out.print("Array has been cleared: " + al);
    }

如果给变量赋予有意义的名称,您的任务将容易得多。 例如

    ArrayList<Integer> al = new ArrayList<Integer>(); 
    Random rand = new Random();
    int lineNumber = 1;
    int lineLength = 0;
    while(lineNumber < 400){
        for (int randCount = 0; randCount < lineLength; randCount++) {
            int pick = rand.nextInt(100);
            al.add(pick);
        }
        lineLength++;
        lineNumber++;
        System.out.println("Contents of al: " + al);
        al.clear();
        System.out.print("Array has been cleared: " + al);
    }
for (int j = 0; j<ii;) {
    ii++;
    val++;
    pick = rand.nextInt(100);
    al.add(pick);
}

是无限循环( j始终为0ii始终为正)。 您应该对其进行修复(根据所需的语义)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM