2015-01-14 49 views
0

這是我第一次問這裏問題。在java中使用10個唯一數字組成的數組

我想從0到9 使的ArrayList有10個獨特的INT號我做下面的步驟:

  1. 創建空的ArrayList
  2. 添加第一個隨機數,所以後來我可以檢查重複
  3. 接下來,我創建了一個新的隨機int值,檢查ArrayList中是否已經有了這個值。如果我有 - 我嘗試另一個號碼,如果我沒有 - 我添加這個號碼。
  4. 如果我有10個號碼,我停止循環

我的代碼:

public static void main(String[] args) { 

    Random rd = new Random(); 
    ArrayList<Integer> list = new ArrayList<Integer>(); 

    int q = rd.nextInt(10); 
    list.add(q); 

    while (true) { 
     int a = rd.nextInt(10); 
     for (int b=0;b<list.size();b++){ 
      if (a == list.get(b)) break; 
      else list.add(a); 
     } 
     if (list.size() == 10) break; 
    } 
    System.out.println(list); 
} 

但所有我在控制檯看到的是漫長的過程。

問題是 - 是否有另一種方法使ArrayList有10個唯一的數字(0到9)?

+0

爲什麼[標籤:機器人]標籤?這個問題與Android編程有什麼關係(請注意,我已經刪除了標籤,因爲我覺得它可能不相關)?另外,要解決這個問題,請調試它。您只需將列表中的數據和「for」循環中的「a」值打印出來,就能明白爲什麼邏輯不起作用。 –

+3

實際上,最簡單的解決方案是使用一個簡單的for循環來按順序填充列表,然後調用'Collections.shuffle(list)'來隨機化你的列表。達達,你完成了! –

+2

這就是我剛剛說的@HovercraftFullOfEels –

回答

11

用數字初始化ArrayList後使用Collections.shuffle

ArrayList<Integer> list = new ArrayList<Integer>(); 
for (int i = 0; i < 10; i++) 
{ 
    list.add(i); 
} 
Collections.shuffle(list); 

這將線性時間運行,因爲ArrayListRandomAccess

1

使用Java 8流

List<Integer> shuffled = 
    // give me all the numbers from 0 to N 
    IntStream.range(0, N).boxed() 
     // arrange then by a random key 
     .groupBy(i -> Math.random(), toList()) 
     // turns all the values into a single list 
     .values().flatMap(List::stream).collect(toList());