一个20个数字的列表,每个数字生成1-100,如何不进行重复?

时间:2015-07-14 03:43:33

标签: java

我看了很多其他人,我仍然没有知道如何在我的代码中输入非重复代码。这里的新手需要有人解释。

import java.util.Random;

class random{
public static void main(String[] args) {
    Random dice = new Random();
    int number;
    for (int counter = 1; counter <= 20; counter++) {
        number = 1 + dice.nextInt(100);
        System.out.println(number + " ");
    }
}

3 个答案:

答案 0 :(得分:2)

首先将随机数添加到集合中,这将停止重复的条目。然后循环并打印出该组。您可以通过几种不同的方式执行此操作,但这是对代码进行最少更改的方法:

Set<Integer> numbers = new HashSet<Integer>();
Random dice = new Random();
int number;
for (int counter = 1; counter <= 20;) {
    number = 1 + dice.nextInt(100);
    if(numbers.add(number)) { //Only increment the counter if the number wasn't already in the set
        counter++;
    }
}
for(Integer num : numbers) {
    System.out.println(num + " ");
}

答案 1 :(得分:0)

而不是仅仅打印随机数有一个集合(只允许唯一元素)捕获数字并有一个if条件来检查集合的长度(set.size()== 20)来自循环直到那时你运行for循环来找到随机数。我认为这将解决您的问题

答案 2 :(得分:0)

跟踪之前生成的内容。试试这个

public static void main(String...args) {
        Random dice = new Random();
        Set<Integer> previouslyGenerated = new  HashSet<Integer>();
        int number = 0,counter = 0;      
        while (counter <20){
            number = 1+dice.nextInt(100);
            if (!previouslyGenerated.contains(number)){
                previouslyGenerated.add(number);
                System.out.println(number + " ");
                counter++;
            }       

        }       

}