2016-04-02 167 views
0

我已經做了一個測驗應用程序,它使用int []數組來設置答案的位置。該數組必須填充數字0,1,2和3,但必須隨機放置(並且只出現一次)。我設法做的唯一方法是這樣的:用隨機數填充int []

public int[] castRanInt(){ 
    int ran_int[] = new int[4]; 
    Random random = new Random(); 
    boolean state = true; 
    ran_int[0] = random.nextInt(4); 
    while (state) { 
     for (int r = 1; r < 4; r++) { 
      ran_int[r] = random.nextInt(4); 
     } 
     state = false; 
     for (int a = 0; a < 4; a++) { 
      for (int b = 0; b < 4; b++) { 
       if (a == b) { 
        continue; 
       } 
       if (ran_int[a] == ran_int[b]) { 
        state = true; 
       } 

      } 
     } 
    } 
    return ran_int; 
} 

唯一的問題是,這往往需要多達100次的循環,而只是爲了填充陣列。有沒有更簡單/更快的方法來做到這一點?

+0

用'1; 2; 3; 4'填充數組,然後洗牌。你可以使用'Collections.shuffle'來洗牌集合,並且可能有一個等價的數組。 –

回答

0

我到目前爲止已經發現:

public int[] castRanInt(){ 
    List<Integer> intList = Arrays.asList(new Integer[]{ 0, 1, 2, 3 }); 
    Collections.shuffle(intList); 

    // Convert List<Integer> to int[] 
    int[] ret = new int[intList.size()]; 
    for(int i = 0; i < ret.length; i++) { 
     ret[i] = intList.get(i);   
    } 

    return ret; 
} 

它使用Collections.shuffle不幸的是說,你需要用率,因此發起了一個列表,從Integer[]轉換爲int[]

0

Arnaud Denoyelle沒有簡單的方法你可以將它洗牌

public List shuffleArray(int size) { 
    List<Integer> list = new ArrayList<>(); 
    for(int i = 0; i < size; i++) { 
     list.add(i); 
    } 
    Collections.shuffle(list); 
    return list; 
}