最近有几个朋友都在做项目中的 抽奖部分,可是网上抽奖,多少有那么点水份。
在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,当然如果是实现方面没有问题,但是和你的需要可能不一样。我只说是一种思路,不去说他在那里使用不好,那里使用好。。