源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

用Java产生100个1-150间不重复数字

  • 时间:2022-03-16 19:42 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:用Java产生100个1-150间不重复数字
核心代码
import java.util.Arrays;

/**
 * 用Java产生100个1-150的数字
 */
public class RandomTest {

 public static void main(String[] args) {
  int[] resultArr = produceNum(1, 150, 100);
  for (Integer num : resultArr) {
   System.out.println(num);
  }
  
  System.out.println("+++++++++++++++++===================+++++++++++++");
  
  // 对结果数组排序后再输出
  Arrays.sort(resultArr);
  for (Integer num : resultArr) {
   System.out.println(num);
  }
 }

 /**
  * 产生随机数字
  * @param minNum 最小数字
  * @param maxNum 最大数字
  * @param numCount 产生的数字个数
  * @return 结果数组
  */
 public static int[] produceNum(int minNum, int maxNum, int numCount) {
  
  // 入参校验
  // 如果随机数的个数大于产生随机数的范围;或最大数小于最小数
  // 直接返回null,说明入参不符合要求
  if (numCount > (maxNum - minNum + 1) || maxNum < minNum) {
   return null;
  }
  
  // 存放结果的数组
  int[] resultArr = new int[numCount];
  
  // count 记录已产生的随机数的个数
  int count = 0;
  
  while(count < numCount) {
   
   // 产生随机数
   int num = (int) (Math.random() * (maxNum - minNum)) + minNum;
   
   // flag 定义本次产生的随机数是否已在数组中
   boolean flag = true;
   
   // 遍历数组中已产生的随机数
   for (int i=0; i<count; i++) {
    
    // 同本次产生的随机数最比较
    if (num == resultArr[i]) {
     
     // 如果已存在相同的值,则跳出for循环,继续外层的while循环,产生下一个随机数
     flag = false;
     break;
    }
   }
   
   // 如果本次产生的随机数在数组中不存在,则将该随机数存放在数组中
   if (flag) {
    resultArr[count] = num;
    
    // 数组中已产生的随机数个数加1
    count++;
   }
  }
  
  return resultArr;
 }
}
[b]代码解读[/b] 1 int num = (int) (Math.random() * (maxNum - minNum)) + minNum; Math.random() 产生的是0~1 之间的double类型的随机数 Math.random() * 10 便会得到 0 ~ 10 之间的随机数,转int后便是0 ~ 9;如果给 Math.random() * 10 + 1,便是1 ~ 11 之间的随机数,转int便是1 ~ 10。 这里的1 相当于程序中的最小值,11则为最大值。 这样便得到了产生随机数的 (int) (Math.random() * (maxNum - minNum)) + minNum 2 for (int i=0; i<count; i++) { 由于每次产生的num都是随机的,所以无法保证重复的问题,所以只有通过去同已经产生的存在数组中的数字去比较,相同,则重新产生,不同,则添加进数组。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部