下面的程序生成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]
答案 0 :(得分:6)
您总是在每次迭代时修改并将相同的数组添加到列表中。
想想这样的情况:
您需要在每次迭代时创建一个新数组:
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
}