static int n = -1;
private static int repeatBuffer[] = new int[10];
static {
repeatBuffer[0] = 0;
//and more
repeatBuffer[9] = 9;
}
static public void randomize() {
do {
Random r = new Random();
randomNumber = r.nextInt(20);
} while (!uniqueInt(randomNumber));
Log.e(TAG, "" + randomNumber); //here I need have a unique int
}
private static Boolean uniqueInt(int random) {
for (int i = 0; i < 9; i++) {
if (random == repeatBuffer[i]) {
return false;
}
}
if (++n > 9)
n = 0;
repeatBuffer[n] = random;
return true;
}
有时我两次得到同样的int,我想知道问题出在哪里?它甚至可以工作吗?我花了很多时间在这上面,我放弃了。我想我需要在代码中进行一些小调整:)
答案 0 :(得分:5)
获取随机int的一种更简单的方法是创建一个整数列表List<Integer>
,并为其添加您想要的数字。然后使用Collections.shuffle(list);
对列表进行混洗。现在从列表的开头开始阅读,每次都会获得一个唯一的随机int。
只需确保每次“读取”列表中的数字时,将其从列表中删除或增加您阅读的位置的索引。
答案 1 :(得分:3)
这是随机数生成器的正常行为,只要数字分布保持一致,生成重复数就是正确的。
如果您需要一组唯一的随机数,您可以在循环内生成它们,并在每次迭代时询问新生成的数字是否存在于生成的数字集中。如果没有,请添加它,如果是,则继续迭代 - 直到该集合具有所需的大小。
答案 2 :(得分:2)
呃,1到20之间的独特随机?第21次运行时会发生什么?
尝试在1到20之间创建一个List
的整数。使用Collections.shuffle()
来重新排列列表。然后弹出列表前面的第一个项目并使用它。