??xml version="1.0" encoding="utf-8" standalone="yes"?>
import java.util.Date;
import java.util.Random;
public class hiden {
public int rand()
{
int sta=1;
//Date d=new Date();
double time=System.currentTimeMillis();
Random r=new Random();
sta=r.nextInt((int)time%1000)%10;
System.out.println(sta);
return sta;
}
public static void main(String args[])
{
hiden h=new hiden();
System.out.println(h.rand());
}
}
import java.util.Random;
class ChooseThread extends Thread
{
private boolean runFlag = true;//军_此线E是否运行的标记
//需要该对象来读取文本框字段Q不用创建它Q申明下好
private ChooseAward chooseAward = null;
private int time=0;
//创徏一个新的随机数生成?br />
Random randomNumber = new Random();
public ChooseThread(Object obj)
{
start();
chooseAward = (ChooseAward) obj;
}
public void start()
{
runFlag = false;
super.start();
}
public void changeflag_start()
{
runFlag = true;
time++;//每点Mơ加一
}
public void changeflag_stop()
{
runFlag = false;
}
/*
*实现文本框滚动的效果
*/
public void run()
{
while (runFlag)
{
/*
* q回一个伪随机敎ͼ它是从此随机数生成器的序列中取出?br />
* 、在 0Q包括)和指定|不包括)之间均匀分布?int?br />
*/
//q回向量中存储了几个L的随便一个序?br />
int num;
hiden h=new hiden();
int k=h.rand();
if(k>chooseAward.level)
{
num = randomNumber.nextInt(chooseAward.v_identNumber.size());
//昄那个选中的序号对应的L
chooseAward.t_identNumber.setText((String) chooseAward.v_identNumber
.elementAt(num));
}
else if(k<=chooseAward.level&&chooseAward.level<10&&chooseAward.z_identNumber.size()>=1)
{
num = randomNumber.nextInt(chooseAward.z_identNumber.size());
//昄那个选中的序号对应的L
chooseAward.t_identNumber.setText((String) chooseAward.z_identNumber
.elementAt(num)+"****");
//chooseAward.z_identNumber.removeElementAt(num);
}
else if(chooseAward.level<10)
{
num = randomNumber.nextInt(chooseAward.v_identNumber.size());
//昄那个选中的序号对应的L
chooseAward.t_identNumber.setText((String) chooseAward.v_identNumber
.elementAt(num));
}
else if(chooseAward.level>=10&&time<=6)
{
num = randomNumber.nextInt(chooseAward.v_identNumber.size());
chooseAward.t_identNumber.setText((String) chooseAward.v_identNumber
.elementAt(num));
}
try
{
sleep(50);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
本程序用于模拟抽奖,可用于日常的单位、公司进行抽奖活动?/span>
具体的算法思想是:
首先从一个文本文件中d参加抽奖的h员信息,该信息有一定的格式既:姓名-手机LQ根据具体情况而定Q切C间是字符“-”Q否则无法读入)。如下图Q?/span>
E序读入的信息装入两个VECTOR中(v_identNumber?/span>v_nameQ。点?#8220;开?#8221;按钮q行抽奖操作?/span>
后台的数据生是利用JAVA的伪随机函数。根据随机数产生展现在前台的字符Q每ơ间隔的旉?/span>0.05U?/span>
用户点击“停止”按钮Q操作线E就挂vQ这时生相应的中奖LQ即前台展示的号码)Q中奖号码存储在v_printident中?/span>v_printident同样?/span>VECTORcd的?/span>
本系l设|的是将产生3?/span>3{奖Q?/span>2?/span>2{奖Q?/span>1?/span>1{奖q有一个特{奖。系l将Ҏ用户点击按钮ơ数来确定生几{奖?/span>
奖项全部产生以后Q点M存,可以结果信息保存在当前目录下的result.txt中?/span>
关于暗箱的说明:
基本说明Q?/span>
暗箱操作不是光明正大的行为,但是作ؓ一个小的研究对象Q本得还是有Ҏ思?/span>
具体功能Q?/span>
可以实现对制定h员的获奖操作Q可以实现对特等奖的产生操作?/span>
实现机制Q?/span>
首先Q用戯入指定获奖的人员文gQ数据的格式为:姓名*L切记是(“*”Q否则无法读?/span>)。在人员文g的最后一行,是控制中奖力度的keyQ具体格式ؓ“ *key”Q切记前面要有一个空格键Q,如下图:
关于key的说?
Key的值可以设|?/span>1?/span>10Q如果没有在q个范围Q系l将自动讄key?/span>5
pȝ?/span>key讄得越大,指定人员的获奖概率就大。具体公式:key/(Mh?/span>*指定人数)
如果key的D|ؓ10Q系l将会生特{奖Q获得者ؓ制定人员的第一,但是除了特等奖,不会再对其他人员有Q何操作(相当于只能生特{奖Q?/span>
其他一些说明读者自己去看程序,q里不再赘述。程序很?在后面的)Q?/span>