Java 如何获得唯一的随机整数? static int n=-1; 私有静态int repeatBuffer[]=新int[10]; 静止的{ repeatBuffer[0]=0; //还有更多 repeatBuffer[9]=9; } 静态公共void randomize(){ 做{ 随机r=新随机(); 随机数=r.nextInt(20); }而(!uniqueInt(randomNumber)); Log.e(TAG,“+randomNumber);//这里我需要一个唯一的int } 私有静态布尔唯一(int随机){ 对于(int i=0;i9) n=0; repeatBuffer[n]=随机; 返回true; }
有时我得到两次相同的int,我想知道问题出在哪里?它甚至可以工作吗?我在这上面花了很多时间,我放弃了。我想我需要在代码中做一些小的调整:)这是随机数生成器的正常行为,只要数字分布保持一致,就可以生成重复的数字Java 如何获得唯一的随机整数? static int n=-1; 私有静态int repeatBuffer[]=新int[10]; 静止的{ repeatBuffer[0]=0; //还有更多 repeatBuffer[9]=9; } 静态公共void randomize(){ 做{ 随机r=新随机(); 随机数=r.nextInt(20); }而(!uniqueInt(randomNumber)); Log.e(TAG,“+randomNumber);//这里我需要一个唯一的int } 私有静态布尔唯一(int随机){ 对于(int i=0;i9) n=0; repeatBuffer[n]=随机; 返回true; },java,android,random,unique,Java,Android,Random,Unique,有时我得到两次相同的int,我想知道问题出在哪里?它甚至可以工作吗?我在这上面花了很多时间,我放弃了。我想我需要在代码中做一些小的调整:)这是随机数生成器的正常行为,只要数字分布保持一致,就可以生成重复的数字 如果需要一组唯一的随机数,可以在循环中生成它们,并在每次迭代时询问新生成的数是否存在于生成的数集中。如果不是,则添加它,如果是,则继续迭代-直到集合具有所需的大小。获取随机整数的更简单方法是创建一个整数列表List,将其与您想要的数字相加。然后使用Collections.shuffle(L
如果需要一组唯一的随机数,可以在循环中生成它们,并在每次迭代时询问新生成的数是否存在于生成的数集中。如果不是,则添加它,如果是,则继续迭代-直到集合具有所需的大小。获取随机整数的更简单方法是创建一个整数列表
List
,将其与您想要的数字相加。然后使用Collections.shuffle(List)洗牌列表代码>。现在从列表的开头开始阅读,每次都会得到一个唯一的随机整数
只要确保每次“读取”列表中的数字时,要么将其从列表中删除,要么增加读取位置的索引。呃,1到20之间的唯一随机数?当它运行到第21次时会发生什么
尝试列出介于1和20之间的整数。使用Collections.shuffle()
洗牌列表。然后从列表前面弹出第一个项目并使用它 我想这就是OP真正想要做的。他们刚刚把实现搞砸了。谢谢,我以前从未用过。我总是使用Random r=newrandom();:)列表和集合更加友好和简单。:)
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;
}