等概率的抽取一个四位数 ,每次取一个,共取4次,4次组成一个4位数,拼起来为Set中的数

本文介绍了一个幸运数字生成器的设计与实现。该程序通过从预设的数字集合中随机选取四位数字来生成幸运号码,确保每次抽取都有相同的概率,并且能够高效地完成任务。
 import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
 * 要求:<br/>
 * 1 每次取一个,共取4次,4次组成一个4位数,拼起来为Set中的数<br/>
 * 2 每次取数,Set中的每个数都有相同的机会
 */
public class LuckyGetter {
 private static long start = 0;
 private static long end = 0;
 public Set<Integer> set = new HashSet<Integer>();
 // public static void main(String[] args) {
 // // 初始化Set
 // LuckyGetter getter = new LuckyGetter();
 // getter.initSet(getter.set);
 // // 取数
 // System.out.println(getter.getRandom());
 // }
 public int getRandom() {
  int num = 0;
  for (int i = 0; i < 4; i++) {
   num = getNext(num);
  }
  return num;
 }
 public int getNext(int num) {
  if (num < 0 || num > 9999) {
   return 0;
  }
  int nextNum = 0;
  // 请把您的代码填写在这里
  return nextNum;
 }
 public void initSet(Set<Integer> set) {
  set.add(1235);
  set.add(1236);
  set.add(1245);
  set.add(1248);
  set.add(1366);
  set.add(1369);
  set.add(1382);
  set.add(1384);
  set.add(2235);
  set.add(2236);
  set.add(2245);
  set.add(2248);
  set.add(2366);
  set.add(2369);
  set.add(2382);
  set.add(2384);
  set.add(8514);
 }
 public static void main(String[] args) {
  start = System.currentTimeMillis();
  for (int i = 0; i < 1000; i++) {
   System.out.println(test());
  }
  end = System.currentTimeMillis();
  System.out.println(end - start);
 }
 @SuppressWarnings("unchecked")
 public static Integer test() {
  LuckyGetter lg = new LuckyGetter();
  Integer qian;
  Integer bai;
  Integer shi;
  Integer ge;
  lg.initSet(lg.set);
  qian = getNumber(lg.set, 1000);
  Set<Integer> set2 = getSet(lg.set, 1000, qian);
  bai = getNumber(set2, 100);
  Set<Integer> set3 = getSet(set2, 100, bai);
  shi = getNumber(set3, 10);
  Set<Integer> set4 = getSet(set3, 10, shi);
  ge = getNumber(set4, 1);
  Integer number5 = qian * 1000 + bai * 100 + shi * 10 + ge;
  return number5;
 }
 @SuppressWarnings( { "unchecked" })
 private static Set getSet(Set<Integer> set, int i, int number2) {
  Set<Integer> set2 = new HashSet<Integer>();
  Iterator it2 = set.iterator();
  while (it2.hasNext()) {
   Integer number = (Integer) it2.next();
   if (number2 == number / i) {
    set2.add(number % i);
   }
  }
  return set2;
 }
 @SuppressWarnings("unchecked")
 private static Integer getNumber(Set<Integer> set, int i) {
  double num0 = 0;
  double num1 = 0;
  double num2 = 0;
  double num3 = 0;
  double num4 = 0;
  double num5 = 0;
  double num6 = 0;
  double num7 = 0;
  double num8 = 0;
  double num9 = 0;
  Iterator it = set.iterator();
  while (it.hasNext()) {
   Integer number = (Integer) it.next();
   number = number / i;
   if (number == 1) {
    num1++;
   } else if (number == 2) {
    num2++;
   } else if (number == 3) {
    num3++;
   } else if (number == 4) {
    num4++;
   } else if (number == 5) {
    num5++;
   } else if (number == 6) {
    num6++;
   } else if (number == 7) {
    num7++;
   } else if (number == 8) {
    num8++;
   } else if (number == 9) {
    num9++;
   } else {
    num0++;
   }
  }
  if (set.size() > 0) {
   num0 = num0 / set.size();
   num1 = num1 / set.size();
   num2 = num2 / set.size();
   num3 = num3 / set.size();
   num4 = num4 / set.size();
   num5 = num5 / set.size();
   num6 = num6 / set.size();
   num7 = num7 / set.size();
   num8 = num8 / set.size();
   num9 = num9 / set.size();
  }
  double randomNumber = Math.random();
  if (randomNumber >= 0 && randomNumber <= num1) {
   return 1;
  } else if (randomNumber >= num1 && randomNumber <= num1 + num2) {
   return 2;
  } else if (randomNumber >= num1 + num2 && randomNumber <= num1 + num2 + num3) {
   return 3;
  } else if (randomNumber >= num1 + num2 + num3 && randomNumber <= num1 + num2 + num3 + num4) {
   return 4;
  } else if (randomNumber >= num1 + num2 + num3 + num4 && randomNumber <= num1 + num2 + num3 + num4 + num5) {
   return 5;
  } else if (randomNumber >= num1 + num2 + num3 + num4 + num5 && randomNumber <= num1 + num2 + num3 + num4 + num5 + num6) {
   return 6;
  } else if (randomNumber >= num1 + num2 + num3 + num4 + num5 + num6 && randomNumber <= num1 + num2 + num3 + num4 + num5 + num6 + num7) {
   return 7;
  } else if (randomNumber >= num1 + num2 + num3 + num4 + num5 + num6 + num7 && randomNumber <= num1 + num2 + num3 + num4 + num5 + num6 + num7 + num8) {
   return 8;
  } else if (randomNumber >= num1 + num2 + num3 + num4 + num5 + num6 + num7 + num8
    && randomNumber <= num1 + num2 + num3 + num4 + num5 + num6 + num7 + num8 + num9) {
   return 9;
  } else {
   return 0;
  }
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值