Java 用随机的不重复的数字填充数组(我怎样才能更快地完成这项工作)?
假设我想用一组不重复的随机数填充一个数组。要求是,必须使用Java 用随机的不重复的数字填充数组(我怎样才能更快地完成这项工作)?,java,arrays,Java,Arrays,假设我想用一组不重复的随机数填充一个数组。要求是,必须使用java.util.Random中的Random类,不能使用ArrayList(我已经使用Collections.shuffle完成了)。只能使用一维数组和任何类型的循环(包括if语句).为了解决这个问题,我制作了一个225的数组,随机数不允许超过225。这是我提出的解决方案,但它似乎不是很有效。我如何才能更快地完成此操作 我用1到225的随机数填充数组。我将数组中的每个元素与其他元素进行比较,如果有一个相似性,我将从0元素重新开始比较。
java.util.Random
中的Random类,不能使用ArrayList(我已经使用Collections.shuffle
完成了)。只能使用一维数组和任何类型的循环(包括if语句).为了解决这个问题,我制作了一个225的数组,随机数不允许超过225。这是我提出的解决方案,但它似乎不是很有效。我如何才能更快地完成此操作
我用1到225的随机数填充数组。我将数组中的每个元素与其他元素进行比较,如果有一个相似性,我将从0元素重新开始比较。我在下面包含了我的源代码
int [] value = new int[225];
int randnum;
Random num = new Random();
for (int x = 0; x < value.length; x++) // Fills array with Random Numbers from 0 to 225
{
randnum = (num.nextInt(225)) + 1;
value[x] = randnum;
}
for (int y = 0; y < value.length; y++) // These two loops compare each value of the array
{
for (int z = y + 1; z < value.length; z++)
{
while (value[y] == value[z])
{
value[y] = num.nextInt(225) + 1;
y = 0; // If the loop runs, the entire looping process starts over again.
}
}
}
int[]值=新的int[225];
int-randnum;
随机数=新随机数();
for(int x=0;x
如果您不能洗牌,最简单的方法是使用流:
int count = 225;
int[] value = new Random()
.ints(1, count + 1)
.distinct()
.limit(count)
.toArray();
您可以使用布尔数组,通过使用生成的数字作为索引来检查添加了哪些值,这将为您提供恒定的查找速度。您只需循环数组一次。只需使用生成的随机数作为布尔数组的索引,如果该数字的索引为false,则我们找到了一个新数字。如果生成的数字不包含true,然后我们继续生成另一个随机数,直到找到该数字的false值
int size = 225;
int [] value = new int[size];
boolean [] valuesCreated = new boolean[size + 1];
int randnum;
Random num = new Random();
for (int x = 0; x < value.length; x++) // Fills array with Random Numbers from 0 to 225
{
do{
randnum = (num.nextInt(value.length)) + 1;
}while(valuesCreated[randnum] == true);
value[x] = randnum;
valuesCreated[randnum] = true;
}
int size=225;
int[]值=新的int[大小];
boolean[]valuesCreated=新布尔值[size+1];
int-randnum;
随机数=新随机数();
for(int x=0;x
请注意,这会将值随机放入数组中,但是此方法按顺序生成值的可能性最小,但数组越大,生成值的可能性就越小。您可以添加
标志并检查它
没有使用HashMap、Hashset或ArrayList的情况下也会出现类似的情况
boolean isThere = false;
for (int x = 0; x < value.length; x++) // Fills array with Random Numbers from 0 to 225
{
randnum = (num.nextInt(225)) + 1;
for(int i =0;i<value.length;i++){
if(value[i] == randnum){
isThere = true;
}
}
if(!isThere){
value[x] = randnum;
isThere = false;
}
}
boolean isThere=false;
for(int x=0;x
int [] value = new int[225];
int randnum;
Random num = new Random();
for (int x = 0; x < value.length; x++)
{
value[x] = x+1;
}
for (int x = 0; x < value.length - 1; x++)
{
int r = num.nextInt(225 - x) + x;
int tmp = value[x];
value[x] = value[r];
value[r] = tmp;
}
int[]值=新的int[225];
int-randnum;
随机数=新随机数();
对于(int x=0;x