c语言编程笔录

首页 >   > 笔记大全

笔记大全

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()方法实现方式也相当实用,可以对于集合进行随机排序,提高程序的灵活性。