Java 尝试用唯一数字填充 int 数组

Java trying to fill int array with unique numbers

我是这个网站的新手,我的英语很差,请原谅我。

我的功能有问题:

public void generate(int[] array) {
    int i=0;
    boolean isvalid=true;
    while (i < 5) {
        int rng = (int)(Math.random()%100*100);
        for (int j=0; j < 5; j++) {
            if (array[j] == rng) {
                isvalid=false;
                System.out.println("duplicate: "+rng);
            }
        }
        if (isvalid) {
            array[i]=rng;
            System.out.println(rng);
            i++;
        }
    }
}

我需要用 0 到 100 之间的唯一随机数填充一个 5 大小的 int 数组。这是可行的,但有时会出现错误,并开始无限循环,并且出于某种原因我的编译器 (netbeans) 无法生成新的随机数,只是循环一些。 例如:

duplicate 62
duplicate 62
duplicate 64
duplicate 97
duplicate 97
duplicate 64
duplicate 97
duplicate 62
duplicate 64
duplicate 62
duplicate 64
duplicate 62
duplicate 97
duplicate 97
duplicate 56
duplicate 97
duplicate 62
duplicate 56
duplicate 56
duplicate 56
duplicate 64
duplicate 56
duplicate 62
duplicate 56

有人对我的问题有任何有用的提示吗? 提前致谢!

一旦 isvalid = false; 就再也不会 true 因此你会得到一个无限循环,因为在那种情况下你不会增加 i (快速修复应该是 isvalid = true 里面 while).

我建议您使用另一种生成这些数字的方法。

首先,您创建一个 List,其中包含从 1100 的所有数字。然后你只需 select 来自 list 的随机数并将它们放入你的数组

List<Integer> list = IntStream.rangeClosed(0, 100)
             .boxed().collect(Collectors.toList());

int[] randomArray = new int[100];
Random random = new Random();

for(int i = 0; i < 100; i++) {
    Integer randomIndex = random.nextInt(list.size());
    randomArray[i] = list.get(randomIndex);
    list.remove(randomIndex);
}

这样你就可以保证在一次迭代中你将获得所需的数组,而没有无用的随机调用。

使用设施 Java 8 为您提供:使用 0 到 100 之间的无限随机整数流,然后不同,然后限制为 5。因为这是家庭作业,我认为你应该做一些努力,所以我不会 post 所需的几行。

private List getRandomNumberList(){
    List<Integer> alist = new ArrayList<>();
    while (alist.size() < 5){
        // for numbers from 0 to 100 use factor 101
        int number = (int) (Math.random() * 101);
        if (!alist.contains(number)){
            alist.add(number);
        }
    }
    return alist;
}