最近有幾個朋友都在做項目中的 抽獎部分,可是網上抽獎,多少有那麼點水份。
在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,當然如果是實現方面沒有問題,但是和你的需要可能不一樣。我只說是一種思路,不去說他在那裏使用不好,那裏使用好。。