听起来很简单…但是我一直在努力解决这个问题,试图找到一个解决方案。
对于一个数字范围,例如 1-12 ,我想在该范围内生成一个随机序列, 并 包括 1 和 12 。
不过我不想重复数字 。
所以我想要这样的东西-3,1,8,6,5,4 ..依此类推,每个数字从1到12。
然后,我想将这些随机数放入,Array并使用该数组“随机”选择并在jsp页面上显示一些项目(例如从数据库中提取的清单)。
Array
到目前为止,我尝试过的问题是,生成了很多 重复的 数字…或者,并非 所有 数字都被选中。
有解决这个问题的简单方法吗?
测试#1使用Collections和shuffle()方法-
Collections
shuffle()
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>"); }
结果是具有重复值的序列- 选择= 3 选择= 8 选择= 7 选择= 5 选择= 1 选择= 4 选择= 6 选择= 4 选择= 7 选择= 12
测试#2-使用随机数学课程
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()。
Collections.shuffle()
您可以使用从1到12的所有值填充数组,然后将它们混排(请参阅例如为什么Collections.shuffle()对于我的数组失败?)