📄 drawlots.java
字号:
//DrawLots.javapackage com.cy;import java.util.*;public class DrawLots { int[] roundArray; int[][] luckyUserArray; int currentRound=0; private int currentRoundUser=0; int userCount; Vector snCollection; Random randomObject = new Random(); /** * 构造函数 * @param userCount - 总共多少用户参加抽奖 * @param rounds - 一共有几轮抽奖,每轮抽奖的奖项是多少,例如 * rounds.length就表示有少轮抽奖,rounds[0]表示第一轮抽奖应该产生的奖项数 * rounds[1]表示第二轮抽奖应该产生的奖项数..一次类推 */ public DrawLots(int userCount,int[] rounds) { currentRound = 0; currentRoundUser = 0; this.userCount = userCount; setRoundArray(rounds); init(); } /** * 为每个用户生成一个整数,即记录索引,当开始抽奖时候,抽取就是从 * 这个记录索引集里面抽取记录,然后根据里面的整数作为用户表格对应的记录索引 * 来获取用户信息 */ void init(){ snCollection = new Vector(userCount); for (int i = 0; i <userCount;i++){ snCollection.add(new Integer(i)); } } /** * 生成抽奖数组,这个二维数组不是常规的矩形数组,而是非规则数组,例如抽奖分两轮 * 分别是5个奖和三个奖,则最后生成的数组是二维数组, * round[0] = new int[5]; * round[1] = new int[3]; * 这个数组里面存放了幸运用户在数据表格里面的记录索引(而不是编号) */ void setRoundArray(int[] rounds){ roundArray=new int[rounds.length]; for (int i=0;i<rounds.length;i++){ roundArray[i] = rounds[i]; } //though it can be done in one loop, but for the code clearness, we make it separatelly luckyUserArray =new int[roundArray.length][]; for (int i=0;i<roundArray.length;i++){ luckyUserArray[i] = new int[roundArray[i]]; } } /** * 检查是否普通用户数足够,能够开始抽奖 */ boolean isUserNumberEnough(){ int summation = 0; for (int i = 0; i<roundArray.length;i++){ summation += roundArray[i]; } if (summation > userCount) { return false; }else{ return true; } } /** * 获得指定范围内的随机数 */ int getRandomNumber(){ int number = Math.abs(randomObject.nextInt()); number = number % snCollection.size(); return number; } /** * 通过当前用户的记录索引获得用户的编号 */ int getUserSN(int index){ Integer snObj = (Integer)snCollection.elementAt(index); int sn = snObj.intValue(); UserInfo user = (UserInfo)AppState.userList.elementAt(sn); return user.getSn(); } /** * 通过当前用户记录索引获得用户名称 */ String getUserName(int index){ Integer snObj = (Integer)snCollection.elementAt(index); int sn = snObj.intValue(); UserInfo user = (UserInfo)AppState.userList.elementAt(sn); return user.getName(); } /** * 将索引针对的记录中用户编号抽出 */ int draw(int index) { Integer intObj = (Integer)snCollection.elementAt(index); int id = intObj.intValue(); luckyUserArray[currentRound][currentRoundUser] = id; snCollection.remove(index); return id; } /** * 获得幸运用户的编号数组 */ int[][] getLuckyUserArray(){ return luckyUserArray; } /** * 为开始下一次抽奖作准备,设置当前抽奖对象的一些状态 */ boolean stepToNextDraw(){ if ((currentRoundUser+1)>roundArray[currentRound]-1){ if (currentRound==roundArray.length-1){ return false; }else{ currentRound++; currentRoundUser = 0; } }else{ currentRoundUser++; } return true; } public int getCurrentRound() { return currentRound; } public void setCurrentRound(int currentRound) { this.currentRound = currentRound; } public int getCurrentRoundUser() { return currentRoundUser; } public void setCurrentRoundUser(int currentRoundUser) { this.currentRoundUser = currentRoundUser; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -