Java怎么实现随机生成100个在1 150之间的数字并不出现重复
更新时间:2023-11-13问题描述
如何使用Java编写程序随机生成100个在1-150之间的数字并且这100个数字不会重复出现。
第一段:问题分析
在Java中,可以使用Random类中的nextInt()方法实现整型随机数的生成,但是在这个问题中,需要保证生成的数字不重复,可以使用Set集合实现。当数字生成后,将其添加到Set集合中,如果Set中已经包含了该数字,则需要重新生成一个数字,直到这个数字不在Set中出现为止。如下所示:
Random random=new Random(); Set<Integer> set=new HashSet<>(); while(set.size() <a100){ int num=random.nextInt(150) + 1; if(!set.contains(num)){ set.add(num); } }
以上代码中,新建了一个Random对象,然后新建了一个Set集合,使用while循环判断Set集合中数字的数量是否达到100,如果没有则循环生成数字,并将数字添加到Set集合中。如果Set集合中已经包含了该数字,则继续重新生成数字,直到不包含为止。
第二段:Stream API实现
Java 8中引入了Stream API,可以使用流式操作实现相同的功能。可以使用IntStream流对象,使用distinct()方法过滤重复元素,使用limit()方法指定流大小并随机生成数字。如下所示:
Set<Integer> set=new HashSet<>(); Random random=new Random(); IntStream.generate(() -> random.nextInt(150) + 1) .distinct() .limit(100) .forEach(set::add);
以上代码中,新建一个空的Set集合,然后新建一个Random对象。使用IntStream.generate()方法生成IntStream流,生成的元素使用lambda表达式实现随机数字的生成。使用distinct()方法过滤重复元素,使用limit()方法指定流大小并随机生成数字,使用forEach()方法将每个数字添加到Set集合中。
第三段:Collections.shuffle()方法实现
Java中的Collections类提供了shuffle()方法,可以将集合中的元素随机排序。我们可以新建一个有序数字的List集合,然后使用shuffle()方法打乱集合中的数字,再根据需要截取前面一段组成100个数字。如下所示:
List<Integer> list=new ArrayList<>(); for(int i=1; i <=150; i++){ list.add(i); } Collections.shuffle(list); Set<Integer> set=new HashSet<>(list.subList(0, 100));
以上代码中,先新建一个有序数字的List集合,使用循环将1-150之间的所有数字添加到List集合中。然后使用Collections.shuffle()方法打乱List集合中的元素顺序,最后根据需要使用subList()方法截取前100个数字,并将其添加到Set集合中。
第四段:总结
本文介绍了三种方法解决Java下随机生成100个数字并且保证这100个数字不重复的问题。分别是使用Random类和Set集合实现、使用Stream API实现以及使用Collections.shuffle()方法实现。其中,Stream API实现方式相比其他两种方法更加简洁明了,同时可读性也更高。Collections.shuffle()方法实现方式也相当实用,可以对于集合进行随机排序,提高程序的灵活性。