2011-05-20 110 views
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 fil的内容复制到lif以不同的顺序,但我得到的注释行的ArrayIndexOutOfBoundException。我正在使用嵌套for循环来检查新ArrayList的元素是否是唯一的。问题随机数生成

+0

非常感谢大家:)我用Collections.shuffle方法及其伟大:) – sakthi 2011-05-20 11:00:20

回答

1

在重新运行内容之前,必须预先分配“lif”-ArrayList以保存“fil.size()”元素。在输入你的循环之前,尝试添加“fil.size()”空元素。

注意!这是一个非常无效的方法来进行重新换行,请参阅Collections.reshuffle()以获得更好的方法。

0
if(fil.get(x).equals(lif.get(y))) 
{ 
    i--; 
    continue; 
} 

一个可能的问题是如果'我'是0(零)。减量i--会将'i'设置为-1,这将导致例外... lif.add(i, fil.get(x));

这可能不是答案,但您应该检查i,x和y是否都在ArrayList的范围内对象。

0

修改注释行:

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

这应该可以解决异常。但是,你的算法看起来不太好。

-2

修改代码,这一点,并检查其是否正常工作

x =random.nextInt(fil.size() - 1); 
+0

从nextInt(INT n)的文件: 返回一个伪随机,从此随机数生成器的序列中抽取的0(包含)和指定值(不包含)之间的int值均匀分布。 – larsmoa 2011-05-20 09:17:03

+0

哎呀对不起,我的错误:P – ingsaurabh 2011-05-20 09:23:55