java - 仅使用数组生成不重复的随机数

标签 java

我想用从 0X 的随机整数填充大小为 X 的数组,且不重复。问题是我必须只使用数组来存储 int 的集合,而不是 ArrayList。我该如何实现?

我不明白为什么我似乎无法理解这个。但这是我最近的一些代码,它填充了列表但允许重复。

System.out.print("Zero up to but excluding ");
int limit = scanner.nextInt();

// create index the size of the limit
int [] index = new int[limit];

for(int fill=0;fill<limit;fill+=1){
    index[fill] = (limit);
}

int randomNumber = 0;
Random rand = new Random();
int [] randoms = new int[limit];
boolean flag = true;

// CODE TO NOT PRINT DOUBLES
for (int z=0;z<limit;z+=1){
    randomNumber = rand.nextInt(limit);
    int i=0;
    while (i<limit){
        if (index[i] == randomNumber){
            flag = true;
        }
        else {
            flag = false;
            break;
        }
        i+=1;
    }
    if (flag == false){
        randoms[z] = randomNumber;
        index[z] = randomNumber;
    }
}
System.out.println("Randoms: "+java.util.Arrays.toString(randoms));

最佳答案

这是一种方法:

  1. 创建一个长度为N的数组
  2. 从0填到N-1
  3. 运行一个 for 循环并随机交换 2 个索引

代码:

// Step 1
int N = 10;
int[] array = new int[N];

// Step 2
for(int i=0; i < N; i++)
   array[i] = i;

// Step 3
for(int i=0; i < N; i++) {
   int randIndex = (int) (Math.random() * N);
   int tmp = array[i];
   array[i] = array[randIndex];
   array[randIndex] = tmp;
}

关于java - 仅使用数组生成不重复的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38547085/

相关文章:

java - Hibernate - 查询为实体中的所有字段返回空值,而同一查询从数据库中完美返回

java - 如何将字符串转换为日期并验证日期是否在给定的特定日期之后

java - ExecutorService 的 newFixedThreadPool() 为什么我们需要固定数量的 Activity 线程?

java - 使用 Java 读/写 Windows 注册表

java - AWS SQS : java. lang.NoClassDefFoundError : com/fasterxml/jackson/annotation/JsonMerge?

java - 双引号内的内容不会打印到 System.out

java - 如何为类型的子类实现 GWT 编辑器?

java - 指定 Hibernate 的 aliasToBean 使用的 setter

java - javax.servlet.http.HttpServlet 有没有办法确定在运行时调用哪个方法

java - 我有 import org.apache.commons.io.FileUtils;在我的代码中,它可以在 Eclipse 上运行,但不能在命令行中运行