2014-10-22 102 views
4

嘿,我想創建一個程序,生成一個隨機數,只允許使用一次。對不起,如果這是令人困惑,我會盡力解釋。我想讓一個程序從1-100產生數字,但是如果它產生了33,那麼對於剩餘的數字產生過程33不能再次產生,所以我應該以100個不同的數字結束。任何幫助真的很感激,謝謝。如何生成一個隨機數,每次都是唯一的

這裏是我的嘗試,到目前爲止

public class Seed { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     int a =0; 
     for (int i =0; i <20;i++) { 
      a = (int) Math.ceil(10 * Math.random()) ; 
      System.out.println(a); 
      int x = a; 
      System.out.println("This is x: " + x); 

      if (x == a) 
      { 
       a = (int) Math.ceil(10 * Math.random()) ; 
      } 
     } 
    } 
} 
+0

使用'Set',將每個新號碼添加到它。繼續生成一個數字,直到它不再存在於可以工作的'Set' – MadProgrammer 2014-10-22 02:57:33

+0

@MadProgrammer中,儘管當你正在尋找最後的剩餘數字時它會變得非常慢 – 2014-10-22 03:04:16

+0

可能的重複[創建沒有重複的隨機數](http ://stackoverflow.com/questions/4040001/creating-random-numbers-with-no-duplicates) – 2014-10-22 03:04:57

回答

11

預先計算List包含所有必需的號碼,然後將它洗和刪除元素每次你需要生成一個新號碼的時間。例如:

List<Integer> numbers = new ArrayList<Integer>(100); 

for (int i = 0; i < 100; ++i) 
    numbers.add(i); 

Collections.shuffle(numbers); 

int pick = numbers.remove(0); 
int pick2 = numbers.remove(0);