java - 如何生成具有特定范围的唯一随机数

标签 java arrays random numbers

我想生成此范围 (0-255) 内的 255 个唯一随机数。这样数组就不会包含重复的记录

short [] array =new short[255];
Random rand = new Random();
boolean   flag=false;
for (int i=0;i<array.length;i++){
    int random_integer = rand.nextInt(255-0) + 0;
    for (int j=0;j<i;j++){
        if ((short)random_integer==array[j]){
            flag=true;
        }
    }
    if (flag==false){
        array[i]=(short)random_integer;  
    }
}
for (int i=0;i<array.length;i++){
    System.out.println(array[i]);
} 

但我只得到前 20 0r 30 个具有值的项目,其余数组项目等于零。

最佳答案

解决方案 1:

我读了 Jon Skeet 的评论,当然,这是最简单的解决方案:

List<Integer> list = new ArrayList<>();
for (int i = 0; i < 255; i++) {
     list.add(i);
}
//and here is the point. Java already have this implemented for you
Collections.shuffle(list);

或者采用 Java 8 声明式风格:

List<Integer> list= IntStream.range(0, 255)
    .boxed()
    .collect(Collectors.toList());
Collections.shuffle(list);

List<Integer> list = new ArrayList<>();
IntStream.range(0, 255).forEach(list::add);
Collections.shuffle(list);

解决方案 2(采用您的解决方案):

您需要为每个单元格生成编号,并检查该编号是否已存在:

 short [] array =new short[255];
 Random rand = new Random();

 for (int i=0; i<array.length; i++) {
     int random_integer = -1;

     //generate integer while it exists in the array
     while(exists(random_integer, array)) {
         random_integer = rand.nextInt(255);
     }

     array[i] = random_integer;
}

现在,让我们检查它是否存在:

public boolean exists(int number, int[] array) {
    if (number == -1)
        return true; 

    for (int i=0; i<array.length; i++) {
        if (number == array[i])
            return true;
    }
    return false;
}

当然,您可以使用 hashmap 来加速 exists() 方法,即将复杂度从 O(n) 降低到 O(1);

关于java - 如何生成具有特定范围的唯一随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31831520/

相关文章:

java - 从照片库中随机选择一张图像

C++ 计算事件的概率

java - 在外部应用程序中使用 Grails HSQLDB

arrays - PostgreSQL 的 id 匹配列表

java - okhttp 授权签名 hmac-sha256 不起作用

c++ - 使用位集在不使用循环的情况下获取数组项的条件和

javascript - 在 javascript/jquery 中将输入值添加到数组中的函数

batch-file - 如何在纯批处理脚本中生成不重复的随机数列表?

java - 将另一个类的元素添加到数组列表

java - 应用程序关闭时如何获得android通知