随机数生成的问题

时间:2011-05-20 09:01:31

标签: java android arraylist indexoutofboundsexception

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的元素是否是唯一的。

6 个答案:

答案 0 :(得分:3)

为什么不尝试使用Collections.copyCollections.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);