Java – 生成随机范围的具体数字没有重复的那些数字 – 如何?

听起来很简单…但是我一直在堵塞,试图find一个和所有的解决scheme。

对于一个范围的数字,比如说1-12 ,我想在这个范围内生成一个随机序列, 并且包括112

我不想要重复的数字

所以我想要这样的 – 3,1,8,6,5,4 ..等等,每个数字从1-12。

然后,我想把这些随机数字放到一个Array并使用该数组在数据库中随机select和显示一些项目(如库存中的库存)。

到目前为止我所尝试过的问题是,有很多重复的数字被生成…或者,并不是所有的数字都被选中。

有没有简单的解决这个问题?


编辑

testing#1使用Collectionsshuffle()方法 –

 ArrayList<Integer> list = new ArrayList<Integer>(10); for(int i = 0; i < 10; i++) { list.add(i); } Collections.shuffle(list); String[] randomNumbers = (String[])list.toArray(); for(int i = 0; i < 10; i++) { out.print(randomNumbers[i]+"<br>"); } 

结果是一个重复值的序列 –
select= 3
select= 8
select= 7
select= 5
select= 1
select= 4
select= 6
select= 4
select= 7
select= 12

testing#2 – 使用随机math类

 int max = 12; int min = 1; int randomNumber = 0; String str_randomNumber = ""; for(int i=0; i<10; i++) { //int choice = 1 + Math.abs(rand.nextInt(11)); int choice = min + (int)(Math.random() * ((max - min) + 1)); out.print("chose = "+choice+"<br>"); } 

结果就像使用Collections.shuffle()

你可以使用从1到12的所有值填充一个数组,然后洗牌(例如, 为什么Collections.shuffle()为我的数组失败? )

你可以把从1到12的所有数字顺序放入数组中,然后使用一些混洗algorithm随机化它们的顺序,例如http://www.leepoint.net/notes-java/algorithms/random/random-shuffling.html

随机数字生成允许重复。 如果你想要一个没有重复的随机数范围,我build议如下:

  1. 生成一个随机数(我会参考这个数字X)。
  2. 添加到Set对象。
  3. 检查Set对象的大小,如果它是所需的大小,就完成了。 如果它小于所需的尺寸,则转到步骤1

如果您使用MySQL或SQLLite作为您的数据库,您可以在SELECT查询级别通过使用ORDER BY RAND()限制为1-12来执行此随机化操作,您可以将WHERE ID> = 1 AND ID <= 12 ORDER BY RAND()

你可以把所有你想要的数字放在一个列表中,然后随机排列列表,然后把随机sorting的列表转换成一个数组,例如

 List<Integer> list = new ArrayList<Integer>(); for (int i = 1; i <= 12; i++) { list.add(i); } Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return Math.random() > 0.5 ? 1 : -1; } ); Integer[] array = list.toArray(new Integer[list.size()]);