2011-05-20 152 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