2013-03-17 42 views
0

所以,我試圖生成長度爲3的隨機獨特數字數組從1到25,我不明白爲什麼我的代碼不工作,我會非常感謝一些幫助!從1到25生成3個隨機數? (JAVA)

public void generateRandom() { 
    for(int j=0; j<3; j++) { 
     dots[j] = (int) (Math.random()*(col*row)+1); 
     System.out.println(dots[j]); 
     for(int i=j; i>0; i--) { 
      if(dots[j]==dots[j-1]) { 
       generateRandom(); 
      } 
     } 
    } 
} 

dots[]是我試圖保存3張獨特的隨機數的數組。順便說一句,col*row == 25

+0

等等......爲什麼要使用for和then recursivity? – 2013-03-17 20:24:21

回答

0

每次generateRandom自稱,它從頭開始下載與第一隨機數,而不是選擇一個新的隨機數的當前位置。

+0

這應該不重要,應該嗎?因爲無論如何,最終陣列會填充3個隨機數。 – LowLanding 2013-03-17 20:17:02

+0

如果是這樣的話,你首先不會有問題。 – 2013-03-17 20:19:21

5

這是一個有點不同的方法。它依賴於創建一個具有指定值的ArrayList,然後對該列表進行混洗。一旦列表被混洗,您可以根據混洗列表中前三個元素創建一個數組。

public static void main(String[] args) { 
    List<Integer> list = new ArrayList<Integer>(); 
    for(int i = 0; i < 26; i++){ 
     list.add(i); 
    } 

    Collections.shuffle(list); 
    Integer[] randomArray = list.subList(0, 3).toArray(new Integer[3]); 

    for(Integer num:randomArray){ 
     System.out.println(num); 
    } 
} 
+1

打敗我這種做法。如果範圍相當小,這是實現這一點的直接方式。 – millimoose 2013-03-17 20:23:14

0

這是方法

public void generateRandom() { 
    for(int j=0; j<3; j++) { 
     boolean f; 
     do { 
     dots[j] = (int) (Math.random()*(col*row)+1); 
     f = false; 
     for(int i=j-1; i>=0; i--) { 
      if(dots[i]==dots[j]) { 
       f = true; 
       break; 
      } 
     } 
     if (!f) 
      System.out.println(dots[j]); 
     } while (f); 
    } 
} 

它的重複數的產生,直到發現沒有重複。

2
for(int j=0;j<3;j++) 
    dots[j]=(int)(Math.random()*Integer.MAX_VALUE)%25+1; 

由於您的Math.random反正是一個隨機數,通過Integer.MAX_VALUE乘以不會影響隨機性。另外,如果你想解釋爲什麼你的代碼不工作,那是因爲如果數字相對較小,比如說在0.001下,那麼當你乘法時得到int就會得到0。