0
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 的内容复制fillif,但我ArrayIndexOutOfBoundException在注释行中得到了一个。我正在使用嵌套的 for 循环来检查 new ArrayList 的元素是否唯一。

4

6 回答 6

3

为什么不试试Collections.copyCollections.shuffle方法。

于 2011-05-20T09:11:03.857 回答
2

Collections.shuffle不是更好的选择吗?

于 2011-05-20T09:11:27.953 回答
1

“lif”-ArrayList 必须预先分配以保存“fil.size()”元素,然后再重新洗牌。在进入 for 循环之前尝试添加“fil.size()”空元素。

笔记!这是一种非常无效的重新洗牌方法,请参阅Collections.reshuffle()以获得更好的方法。

于 2011-05-20T09:11:15.590 回答
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 对象的范围内。

于 2011-05-20T09:11:40.050 回答
0

将注释行修改为:

lif.add(fil.get(x));

这应该修复异常。但是,您的算法看起来不太好。

于 2011-05-20T09:11:40.720 回答
-2

将代码更改为此并检查是否有效

x =random.nextInt(fil.size() - 1);
于 2011-05-20T09:15:15.250 回答