打印生成的20个随机数字列表+打印不同的列表与第一个列表中的相同#s没有重复#s

时间:2015-02-02 01:00:09

标签: java for-loop random integer

我正在尝试制作一个程序,在1到20之间生成20个随机整数,然后将随机数列表打印到屏幕上。之后,我想打印一个不同的列表,屏幕上显示第一个列表中相同的数字,只跳过已经打印到屏幕上的任何数字。目前,我的代码生成从1到20的20个数字。我不知道如何打印不同的列表,只有没有重复的数字。我感谢所有提前帮助我的人!

public void randomNumbers(){
    System.out.println("Twenty random integers: ");
    for (int x = 0; x < 20; x++){
        int max = 20; //max value for range
        int min = 1; //min value for range
        Random rand = new Random();
        int randomNum = rand.nextInt((max - min) + 1) + min;//generates random # within range
        System.out.println(randomNum);
    }
System.out.println("Twenty random integers w/o duplicates: ");
}

2 个答案:

答案 0 :(得分:2)

这是一个有趣的方法,可以一次性使用Java 8流:

Random rand = new Random();
IntStream.generate(rand::nextInt).limit(20).map(n -> n % 20 + 1)
    .peek(System.out::println)
    .collect(Collectors.toSet()).forEach(System.out::println);

如果您不习惯流,那么我将按如下方式翻译:

  • generate =给我一个源源不断的随机数
  • limit =实际上只是给我第20个
  • map =将数字转换为1到20之间
  • peek =打印出来
  • collect =将它们放入一套
  • forEach =打印出设置
  • 中的每个项目

答案 1 :(得分:1)

如果您需要在没有流的情况下解决这个问题,那么一个简单的机制就是在打印时将数字添加到集合中:

Random rand = new Random();
Set<Integer> randSet = new TreeSet<>();
for (int x = 0; x < 20; x++){
    int randomNum = rand.nextInt(20) + 1;
    randSet.add(randomNum);
    System.out.println(randomNum);
}
for (Integer randomNum: randSet) {
    System.out.println(randomNum);
}