2016-04-02 144 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; 
}