我正在尝试一个简单的代码,但我不知道出了什么问题。我试图将int []数组添加到ArrayList中。它被正确添加。但是,一旦ArrayList中有多个元素,列表中的每个元素都会被最新值替换。我尝试查找可能的错误,但找不到任何错误。我在这里提供我的代码和输出,以便我可以帮助您找出代码中的错误。
代码:
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
public class main {
public static void main(String[] args) {
ArrayList<int[]> outer = new ArrayList<int[]>();
int[] list = new int[7];
int total = 2;
int l = 3;
SecureRandom rand = new SecureRandom();
for (int i = 0; i < total; i++)
{
if((i+1) % l == 0)
{
list = new int[7];
outer = new ArrayList<int[]>();
}
else {
for(int j = 0; j < 7; j++)
{
int num = rand.nextInt(100);
list[j] = num;
}
System.out.println(Arrays.toString(list));
outer.add(list);
System.out.println(outer.size());
System.out.println(i);
System.out.println(Arrays.toString(outer.get(i)));
}
}
System.out.println(Arrays.toString(outer.get(0)));
System.out.println(Arrays.toString(outer.get(1)));
}
}
我得到的输出是:
输出:
[13, 50, 3, 47, 53, 57, 61]
1
0
[13, 50, 3, 47, 53, 57, 61]
[66, 96, 45, 2, 95, 1, 69]
2
1
[66, 96, 45, 2, 95, 1, 69]
[66, 96, 45, 2, 95, 1, 69]
[66, 96, 45, 2, 95, 1, 69]
答案 0 :(得分:4)
您正在将相同的int[]
实例重复添加到列表中。
else { for(int j = 0; j < 7; j++) { int num = rand.nextInt(100); list[j] = num; } System.out.println(Arrays.toString(list)); outer.add(list); System.out.println(outer.size()); System.out.println(i); System.out.println(Arrays.toString(outer.get(i))); }
此列表中的任何内容都不会调用list = new int[7]
。这意味着每次操作,您都会用新的随机数覆盖list
的内容,然后再次将相同的列表添加到ArrayList
。
ArrayList
将使您高兴地一遍又一遍地添加相同的对象。重要的是要了解,将对象放入ArrayList
不会以某种方式复制它或任何东西。
答案 1 :(得分:0)
每次将新的int []添加到ArrayList时,都需要每次创建一个新的数组。只需将int[] list = new int[7];
移到for循环内,这样每次就可以创建一个新的int []。
答案 2 :(得分:0)
您更改了同一int[]
实例的值,无论i
是什么,并且您将int[]
的相同引用引用到outer
,所以outer.get(0)
和outer.get(0)
将始终相同。