2013-04-29 60 views
0

我試圖用隨機發生器生成2d數組。基本上,每列應該包含1-50之間的隨機值,但不會重複,但問題是,我無法在同一行或程序中的任何其他行或列上獲得重複值。換句話說,每個I整數應該只顯示一次。我的對象是通過鏈表創建的,我可能會將algorthim整合到那裏,但現在我知道了,但是我做了什麼。java隨機發生器不重複

int[] array = new int[50]; 



     for(int i=1;i<=9;i++) 
     { 

     int[] grades = new int[5]; 
      for(int j=0;j<=4;j++) 
      { 

      int unique = gen.nextInt(50)+1; 


      grades[j] = unique; 
      } 
      list.add(new Student(i, grades)); 

     } 

     System.out.println(list); 

我的輸出:

Student1: 20 49 45 16 13 
Student2: 28 10 11 30 6 
Student3: 13 25 37 31 49 
Student4: 8 23 8 12 32 
Student5: 22 18 35 2 7 
Student6: 35 8 16 23 36 
Student7: 35 3 15 42 2 
Student8: 43 12 44 2 35 
Student9: 12 21 36 23 12 

所以我的問題是這樣的。我如何在不重複值的情況下實現隨機生成。通常我會嘗試一個集合列表,但我正在嘗試使用java.util.Random來做到這一點。我個人認爲,我會以不同的方式做到這一點,但我被告知。謝謝

回答

6

這裏是我會做:

取號1-50的ArrayList,然後在列表上使用Collections.shuffle。

+0

簡單而優雅,這是正確的解決方案。 – nook 2013-04-29 17:41:17

+0

這是實際的解決方案,但有沒有一種方法來實現這個使用Random()生成器?我很確定我被指示這樣做。 – user2188838 2013-04-29 17:43:22

+0

@ user2188838:當然,在這種情況下,請按照vlad-ardelean的說法。 Collections.shuffle使用隨機生成器,順便說一句。 – 2013-04-29 17:48:59

0

您可以在接受之前檢查號碼是否唯一。例如,您可以嘗試如下所示:

int count=0; 
List<Integer> list=new ArrayList<Integer>(); 
    while(count<50){ 
     int num=random.nextInt(50); 
      if(!list.contains(num)){ 
       list.add(num); 
       ++count; 
      }      
    } 
+0

所以基本上,製作一個數組列表並隨機化一個整數並檢查該整數是否已被使用。然後提高每個值,直到達到50,對吧? – user2188838 2013-04-29 17:49:19

+0

是的,這基本上是我所建議的。任何集合都可以工作,我只是提出了一個列表,因爲它已經被提及。我會使用你的教授建議你存儲結果的數據結構,如果需要的話(數據結構不具有它)創建一個包含方法,該方法返回一個布爾值來檢查數字是否存在。 – 2013-04-29 17:51:47

+0

數組列表實現I結束了爲每行打印模式的所有內容,所以我決定完全避免這種方式。我偶然在這個在線指南,http://stackoverflow.com/questions/16284894/java-random-generator-without-repeat?answertab=active#tab-top 基本上,它假設生成的數量並添加一個值那還沒有到位。這個實現的問題是,儘管正確地處理了一切(特別是關於隨機變量和對象的變量),我仍然不斷收到符號錯誤,我寧願這樣做,因爲它看起來更容易。 – user2188838 2013-05-01 00:48:14