ArrayList <String> fil = new ArrayList<String>();
ArrayList <String> lif = new ArrayList<String>();
int x=0;
long tim = System.currentTimeMillis();
Random random = new Random(tim);
for(int i=0;i<fil.size();i++)
{
x =random.nextInt(fil.size());
for(int y=0;y<lif.size();y++)
{
if(fil.get(x).equals(lif.get(y)))
{
i--;
continue;
}
}
System.out.println("Set the value of x"+x);
lif.add(i, fil.get(x));//array index out of bound exception
}
我正在尝试以不同的顺序将ArrayList fil
的内容复制到lif
,但我在注释行中得到ArrayIndexOutOfBoundException
。我正在使用嵌套的for循环来检查新ArrayList的元素是否是唯一的。
答案 0 :(得分:3)
为什么不尝试使用Collections.copy和Collections.shuffle方法。
答案 1 :(得分:2)
Collections.shuffle不是更好的选择吗?
答案 2 :(得分:1)
必须预先分配“lif”-ArrayList以在重新装入内容之前保存“fil.size()”元素。在输入你的循环之前,尝试添加“fil.size()”null元素。
请注意!这是一种非常无效的重组方法,请参阅Collections.reshuffle()以获得更好的方法。
答案 3 :(得分:0)
if(fil.get(x).equals(lif.get(y)))
{
i--;
continue;
}
一个可能的问题是如果'i'为0(零)。递减i--
会将'i'设置为-1,这将导致... lif.add(i, fil.get(x));
这可能不是答案,但您应该检查i,x和y是否都在ArrayList对象的范围内。
答案 4 :(得分:0)
将评论行修改为:
lif.add(fil.get(x));
这应该可以修复异常。但是,您的算法看起来不太好。
答案 5 :(得分:-2)
将代码更改为此并检查是否有效
x =random.nextInt(fil.size() - 1);