显示arrayList <int []> </int []>的内容

时间:2014-01-18 19:35:13

标签: java arraylist

下面的程序生成10对特定大小的随机数,并将它们存储在名为test的ArrayList中 -

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Random;

public class randomGenerate
{
    static ArrayList<String> tcase=new ArrayList<String>();
    static ArrayList<int[]> test=new ArrayList<int[]>();

    public static void main(String args[])
    {

        tcase.add("1");
        tcase.add("2");
        tcase.add("3");
        tcase.add("4");
        tcase.add("5");
        tcase.add("6");
        randomSelection(10,2);
        for(int i=0;i<test.size();i++)
        {
            System.out.println(Arrays.toString(test.get(i)));
        }
    }

    static int randomNo(int max,int min)
    {
        Random obj = new Random();
        int n = max - min + 1;
        int i = obj.nextInt(n);
        int randomNum =  min + i;
        return randomNum;   
    }

    static void randomSelection(int limit, int pairSize) 
    {
        int max = Integer.parseInt(Collections.max(tcase));
        int min = Integer.parseInt(Collections.min(tcase));
        System.out.println(max+"  "+min);
        int ar[]=new int[pairSize]; 
        for(int i = 0;i < limit;i++)
        {
            for(int j = 0;j < pairSize;j++)
            {
                ar[j]=randomNo(max,min);
                System.out.print(ar[j]);
            }
            test.add(ar);
            System.out.println();
        }

    }
}

我的问题是,在打印arrayList“test”的内容时,只显示最后一个值。为什么不显示所有值。

输出 - (例如)

23
65
45
63
12
23
52
52
16
12
[1, 2]
[1, 2]
[1, 2]
[1, 2]
[1, 2]
[1, 2]
[1, 2]
[1, 2]
[1, 2]
[1, 2]

2 个答案:

答案 0 :(得分:6)

您总是在每次迭代时修改并将相同的数组添加到列表中。

想想这样的情况:

enter image description here

您需要在每次迭代时创建一个新数组:

for(int i = 0;i < limit;i++){
    int ar[]=new int[pairSize]; //create a new one at each iteration
    for(int j = 0;j < pairSize;j++){
       ar[j]=randomNo(max,min);
       System.out.print(ar[j]);
    }
    test.add(ar);
    System.out.println();
}

答案 1 :(得分:0)

问题是你要在ar的每次迭代中将数组ArrayList添加到randomSelection()测试中,所以当你在下一次迭代中修改ar时,你就是在ArrayList内修改它,以解决此尝试:

方式1:

每次迭代创建一个新数组

int ar[];
for (int i = 0; i < limit; i++) {
    ar =  new int[pairSize]; // Initialize inside 'for'
    for (int j = 0; j < pairSize; j++) {
        ar[j] = randomNo(max, min);
        System.out.print(ar[j]);
    }
    test.add(ar);
}

方式2:

创建数组ar的副本并将其添加到test

int ar[] = new int[pairSize];
for (int i = 0; i < limit; i++) {
    for (int j = 0; j < pairSize; j++) {
        ar[j] = randomNo(max, min);
        System.out.print(ar[j]);
    }

    test.add(ar.clone()); // Create a copy
}