`
guojingxf
  • 浏览: 65984 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java中生成随机数 1.随机数比较 2.控制范围随机数 3.获取范围内不重负随机数

阅读更多

最近有几个朋友都在做项目中的  抽奖部分,可是网上抽奖,多少有那么点水份。

 

在Java 中我们可以使用java.util.Random类来产生一个随机数发生器。它有两种形式的构造函数,分别是Random()和Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(long seed)使用指定的seed作为发生器的种子。   很多应用程序会发现 Math 类中的 random 方法更易于使用。

 

做一个例子,大家可以找出下面的问题,主要是性能方面. 例子是随机产生一个只包含x个8的x的(int)5位数;

问题如下:随机产生一个5位数,要求其中包含一个8或者几个8,用户个人设置显示的个数

1.首先我们来看下规律

一个5位数字,只包含一个8的有多少

 

个位   十位    百位         千位     ........

08     18

         28

         38

         48

         58

         68

         78

         98

         

1         9      9*9       9*9 *9  ...........

 

其实上面有点迷惑啦大家的思路,但是要看个人咋想!!用户在设置多少的时候也不能超过最大值。

 

1.先看mian方法

    Random rd = new Random();
    int num = rd.nextInt(99999 - 9999) + 9999; // 精确定位5位数值

产生精确定位5位数值,大家在其他使用可以随便定义

 

具体程序如下,相信大家一定了解,如果不了解,就运行下..下班拉,回家戳麻将!!!

 

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RmInt {

 public int getNum(int randomNum, int nb) {
  int num_5 = randomNum / 10000; // 万位
  int num_4 = randomNum % 10000 / 1000; // 千位
  int num_3 = randomNum % 1000 / 100; // 百位
  int num_2 = randomNum % 100 / 10; // 十位
  int num_1 = randomNum % 10 / 1; // 个位

  int[] nums = new int[] { num_5, num_4, num_3, num_2, num_1 };
  // 获得8的个数
  int num = this.getloop(nums);
  // 返回符合要求的randomNum
  if (nb == num) {
   return randomNum;
  }
  return 0;
 }

 /**
  * 判断随机数里8的个数 有1个8 returnNum=1
  */
 public int getloop(int[] nums) {
  int returnNum = 0;
  // 循环将5位数各个位置的数值比较,是8的个数相加
  for (int j = 0; j < nums.length; j++) {
   int k = nums[j];
   if (k != 0 && k % 8 == 0) {
    returnNum += 1;
   }
  }
  return returnNum;
 }

 public static void main(String[] args) {
  RmInt r = new RmInt();
  /*
   * Random 随机数生成器 获取5位数 nb 用户设置8的个数 arrInt 符合用户要求的数值
   */
  int userSize = 20;//用户设置需要的个数
  int nb = 2;//含8的个数
  
  List arrInt = new ArrayList();

  int num_nub = 0;// 循环次数
  while (num_nub < userSize ) {
    Random rd = new Random();
    int num = rd.nextInt(99999 - 9999) + 9999; // 精确定位5位数值
    
    // 调用rdnum方法
    int rdnum = r.getNum(num, nb);
    //判断下如果设置的rdnum不为0(不符合要求为0)
    if (rdnum != 0) {
     arrInt.add(rdnum);
     num_nub += 1;
    }
  }
  for (int t = 0; t < arrInt.size(); t++) {
   System.out.print(t+":"+arrInt.get(t)+'\n');
  }

 }
}

 

 

上面是产生随机数的一种思路,下面再说种,具体的要求和上面一样,大家来看对不对

 

我按上面的办法得到一个不包含8的4位数的随机数值比如2456,然后1-5之间我再生成一个,那么1-5无论生成几都把他当成8

 

比如生成2,那么最后得到数值28456    比如生成1,那么最后得到数值82456    

 

 

这样的话我们就遗漏9,当然如果是实现方面没有问题,但是和你的需要可能不一样。我只说是一种思路,不去说他在那里使用不好,那里使用好。。 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics