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,當然如果是實現方面沒有問題,但是和你的需要可能不一樣。我只說是一種思路,不去說他在那裏使用不好,那裏使用好。。 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章