有没有java生成随机数工具类的小程序或者营销工具?

1569人阅读
java抽奖小程序
随机数的生成
有些公司到年底就都会有抽奖的活动。今天看到这个话题,感觉挺有意思,就自己做了一个简单的抽奖小程序。
设计要求:一个抽奖人数为60人的小公司抽奖。中奖人数设定为6人。中过奖的人不得重复中奖。
场景设置:显示屏,抽奖用号码牌60个,从1到60,个人随机抽取。抽取后开始运行程序公布结果。
小程序的效果:完全满足上面的要求,并且每个中奖号码的生成时间有间隔,这样更有公示效果和抽奖效果。
下面是代码部分。用到 随机数,list和线程
import java.util.ArrayL
import java.util.L
public class ChouJiang {
public static void main(String[] args) throws InterruptedException {
List&String& li=new ArrayList&String&();
for (int i = 1; i &= 60; i++) {
li.add(i+"");
boolean flag=true;
int count=1;
System.out.println("中奖号码为如下公示,请持有对应编号的员工上来领取奖品-iphone手机一部。");
while(flag){
int b=(int)(1+Math.random()*(60-count));
if(count ==10){
flag=false;
Thread.sleep(3*1000);
System.out.println("第"+count+"位幸运者
"+li.get(b));
String aa = (String)li.get(b);
li.remove(aa);
System.out.println("---------公示结束!!!------------");
运行结果:
这其中涉及两个知识点:1 . 随机数的生成。 2. 用数组还是集合作为奖池?
1.随机数生成的几种方法
java.Math包
(数据类型)(最小值+Math.random()*(最大值-最小值+1))
例:从1到10的int型随数:
(int)(1+Math.random()*(10-1+1))
1.2 java.Random包
通过java.util包中的Random类的nextInt方法来得到1-10的int随机数
Random ra =new Random();
System.out.println(ra.nextInt(10)+1);
1.3 生成随机小数
生成0到1之间的任意随机小数: 生成[0,d)区间的随机小数,d为任意正的小数,则只需要将nextDouble方法的返回值乘以d即可。
[n1,n2] 也就是 ra.nextDouble() * (n2-n1)+n1
2. 用数组还是集合作为奖池?
一开始我是用数组,发现最后还是要转成list,因为要用到remove方法来移除已经产生的中奖号码,而且Arrays.asList()将数组转成list集合,调用remove方法就会出现这样的异常:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at exercise.UnSupportedTest.main(UnSupportedTest.java:12)
错误分析:
java.lang.UnsupportedOperationException是指请求的方法不被支持的异常。在从Arrays.asList()转化过来的List的不支持add()和remove()方法,这是由于从Arrays.asList()返回的是返回java.util.Arrays$ArrayList,而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,add() 和remove()等方法在AbstractList中默认throw UnsupportedOperationException而不做任何操作。ArrayList重写这些方法对List进行操作,而Arrays$ArrayList却没有重写add()和 remove()等方法,所以对从Arrays.asList()转化过来的List进行add()和remove()会出现UnsupportedOperationException异常。
参考博文:他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)联系方式请留下您的联系方式方便我们沟通确认必填项,请输入正确的QQ号必填项,请输入正确的手机号必填项,请输入正确的邮箱确定亲,要输入内容才能提交哦~感谢您的支持,我们会尽快核实~VB小程序:生成十个不反复的随机数 - VB当前位置:& &&&VB小程序:生成十个不反复的随机数VB小程序:生成十个不反复的随机数www.MyException.Cn&&网友分享于:&&浏览:66次VB小程序:生成十个不重复的随机数我们通过随机数函数Rnd结合for循环嵌套来实现生成十个不重复的随机数,代码如下:
Option Explicit
Dim a(9) As Integer, i As Integer, j As Integer&&&& ‘定义数组及循环变量
Dim Temp As Integer&&&& ’定义一个临时变量存储生成的随机数
Dim Flag As Boolean&&&&& ‘定义一个布尔型变量来给数组元素做标记
Private Sub Form_Click()
Randomize&&&& ’初始化随机数发生器
For i = 0 To 9&&&& ’外循环,用来生成十个随机数和将满足条件的这是个随机数由If条件判断后输出
&&& Temp = Int(Rnd() * 100 + 1)&&&& ‘生成一个随机数存放在Temp中
&&& Flag = False&&&& ‘假设此时的判定重复标识Flag为False(不重复)
&&& For j = 0 To i - 1&&&& ‘内循环,来筛选外循环生成的随机数是否跟已存入数组的任何一个元素重复
&&&&&&& If Temp = a(j) Then&&&&&
&&&&&&&&&&& i = i - 1&&&& ‘如果重复,则通过将循环变量减一来退回到上一个循环
&&&&&&&&&&& Flag = True&&&& ‘将重复标识设置为True(重复)
&&&&&&&&&&& Exit For&&&& ‘由于在数组中已经存在这次循环所生成的数,于是放弃这次循环
&&&&&&& End If
&&& Next j
&&& If Flag = False Then
&&&&&&& a(i) = Temp&&&& ‘如果标识便是不重复,那当前的随机数满足条件,将这个数存入数组
&&&&&&& If i = 9 Then
&&&&&&&&&&& Print a(i) & Chr(13) & Chr(10)
&&&&&&& Else
&&&&&&&&&&& Print a(i);
&&&&&&& End If&&&& ‘这个If选择是我自己设计用来控制输出格式的
&&& End If
这个代码总体的简要思想就是:
由外循环产生随机数,然后进入内循环,判断随机数是否与数组中已有元素重复
如果重复,取消掉该次循环,再次进行内循环;如果不重复,就将这个符合条件的数赋值给对应的数组元素
最后,由外循环将符合条件的数按照格式在窗体上显示出来
&以上代码和注释是自己的理解,如果有什么错误或是有需要改进的地方,大家不妨提出来。
PS:这里还推荐一个算法,代码如下:
Option Explicit
Dim a(9) As Integer, i As Integer, j As Integer
Private Sub Form_Click()
For i = 0 To 9
&&& a(i) = Int(Rnd() * 100 + 1)
&&& For j = 0 To i - 1
&&&&&&& If a(i) = a(j) Then
&&&&&&&&&&& i = i - 1
&&&&&&&&&&& Exit For
&&&&&&& End If
&&& Next j
For j = 0 To 9
&&& If j = 9 Then
&&&&&&& Print a(j) & Chr(13) & Chr(10)
&&&&&&& Print a(j) & && &;
&&& End If
这个代码是直接把生成的随机数存进数组,然后再比较已经存在于数组中的每一个元素,判断有无相同的;
而上一个算法是产生一个数,判断是否与数组里的元素存在重复现象,再将这个数存入数组。
大家多交流!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&13/02/18 19:32 于机房 40号
欢迎访问我的博客:http://.blog.163.com/&&&&&&&&&&&http://blog.sina.com.cn/tonyliuchen
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
目前代码可以实现随机产生数字,我想加一个数组用来保存抽中的号码
下次产生随机数的时候检查数组中是否存在
不存在才能显示在页面,js代码如下:
var g_Interval = 1;
var g_PersonCount = 150;//参加抽奖人数
var running =
var ary= [];//声明空数组用来保存抽中的号码
function beginRndNum(trigger){
if(running){
clearTimeout(g_Timer);
$(trigger).val("开始");
$('#ResultNum').css('color','red');
updateRndNum()
console.log(ary);
$('#ResultNum').css('color','black');
$(trigger).val("停止");
beginTimer();
function updateRndNum(){
var num = Math.floor(Math.random()*g_PersonCount+1);//随机生成一个数
ary.push(num);
$('#ResultNum').html(num);
function beginTimer(){
g_Timer = setTimeout(beat, g_Interval);
function beat() {
g_Timer = setTimeout(beat, g_Interval);
updateRndNum();
这个问题已被关闭,原因:问题已解决 - 问题已解决,且对他人无借鉴意义
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
function updateRndNum(){
var flag = 1
while(flag==1){
var num = Math.floor(Math.random()*g_PersonCount+1);//随机生成一个数
flag=arr.indexOf(num);
ary.push(num);
$('#ResultNum').html(num);
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这个其实很简单
假设你们有20个人,先生成一个数组[],数组里面可能存放的是员工号1,然后生成随机范围在 1-20 内的随机数,这个数作为数组的下标,取出这个下标对应的数作为中奖号码,数组内删除这个下标,数组长度变成192,然后生成随机范围在 1-19 内的随机数,这个数作为数组的下标,取出这个下标对应的数作为中奖号码,数组内删除这个下标,数组长度变成18....
当然这个算法是有名字的 Fisher-Yates shuffle 算法
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

我要回帖

更多关于 微信小程序生成随机数 的文章

 

随机推荐