在我的程序中,我使用的是随机生成器。
Random random = new Random();
//How i use it
int i = random.nextInt(numberNeeded);
问题是,我需要找到一种方法,每个数字只生成一次。所以我猜它不是完全随机....例如....当生成数字1时,我不希望再次调用它,而是调用其他数字之一...像2,3或4 ...然后,当4呼叫时,它只能呼叫2或3 ..
然后下一次数字被洗牌然后重复这个过程...
数字需要介于4到16之间
答案 0 :(得分:7)
在您要选择的元素列表中使用Collections.shuffle可能要容易得多:
ArrayList<Integer> numbers = new ArrayList<Integer>();
for (int i=4; i<=16; i++)
numbers.add(i);
Collections.shuffle(numbers);
// numbers is now in a random order and contain the numbers 4 through 16
答案 1 :(得分:0)
首先确保在您的应用程序首次启动时只执行一次new Random()
。
其次,记住变量中的最后一个值,并永远循环直到它不匹配。
Random random = new Random();
int lastNumber = -1;
while (true)
{
int i = random.nextInt(numberNeeded);
if (i == lastNumber) continue;
lastNumber = i;
break;
}
答案 2 :(得分:0)
将数字4到16添加到ArrayList,然后使用Collections.shuffle(...)对其进行随机播放。然后以ArrayList顺序返回它们
答案 3 :(得分:0)
您可以使用Collections.shuffle ...
//Setup your list as needed...
final List<Integer> list = new ArrayList<Integer>();
list.addAll(Arrays.asList(new Integer[] {
1, 2, 3, 4 }));
// Randomizes the list
Collections.shuffle(list);
for (Iterator<Integer> i = list.iterator(); i.hasNext();) {
System.out.println(i.next());
//Removes from the list...
i.remove();
}
答案 4 :(得分:0)
也许不是最好的方法,但最直接的方法是使用布尔数组。
//create an array of boolean values set to TRUE
boolean[] isavailable = new boolean[somesize];
Arrays.fill(isavailable, Boolean.TRUE);
//Get a random number
Random r = new Random();
int myrandomnumber=r.nextInt()%25; //Im just going to use 25 for example
if (isavailable[myrandomnumber])
{
isavailable[myrandomnumber]=false;
//do whatever you want with the number here
}
else
{
//Generate another random number here
}
老实说,最好把它放到while循环中,如果连续生成两个以上不可用的数字,那么你就会被覆盖,但这应该给你基本的想法。