重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
我用多线程写的,你可以参考下。
创新互联建站是一家专注于网站设计制作、成都做网站与策划设计,鼎城网站建设哪家好?创新互联建站做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:鼎城等地区。鼎城做网站价格咨询:028-86922220
系统界面图如下:(注:重置功能为清除已经中奖号码,回归1-100都可以中奖状态。)
代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
System.Threading.Thread g_Thread = null;
Listint g_list = new Listint();
int g_Num = 0;
delegate void g_delegate();
/// summary
/// 开始
/// /summary
/// param name="sender"/param
/// param name="e"/param
private void button2_Click(object sender, EventArgs e)
{
if(g_list.Count==100)
{
MessageBox.Show("所有数字已使用,请重置!");
return;
}
button3.Enabled = true;
Random r = new Random();
g_delegate dele= ChangeTxt;
g_Thread = new System.Threading.Thread(() =
{
while(this.IsDisposed==false)
{
g_Num = r.Next(1, 100);
if(g_list.Contains(g_Num))
{
g_Num = 1;
}
while(g_list.Contains(g_Num))
{
g_Num++;
}
this.Invoke(dele);
System.Threading.Thread.Sleep(50);
}
});
g_Thread.Start();
}
void ChangeTxt()
{
label2.Text = g_Num.ToString();
}
/// summary
/// 停止
/// /summary
/// param name="sender"/param
/// param name="e"/param
private void button3_Click(object sender, EventArgs e)
{
//if(g_Thread.ThreadState==System.Threading.ThreadState.Running)
{
g_Thread.Abort();
g_list.Add(Convert.ToInt32(label2.Text));
}
button3.Enabled = false;
}
/// summary
/// 重置
/// /summary
/// param name="sender"/param
/// param name="e"/param
private void button1_Click(object sender, EventArgs e)
{
g_list.Clear();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
System.Environment.Exit(0);
}
}
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j
j = GetRndNotRepeat(1, 10, 10)
If j(0) Then
For i = 1 To 10
MsgBox(j(i))
Next
End If
End Sub
Public Function GetRndNotRepeat(ByVal NumMin As Integer, ByVal NumMax As Integer, ByVal n As Integer)
'编制:xsfhlzh
'功能:取NumMin到NumMax间的n个随机整数
'说明:取数标志数组是Byte,每一位表示NumMin到NumMax间某个数的状态
Dim arr() As Integer
If n NumMax - NumMin + 1 Then
ReDim arr(0)
arr(0) = 0
Return arr
Else
ReDim arr(n)
Dim m As Integer
Dim b() As Byte
m = Int((NumMax - NumMin) / 8)
ReDim b(m)
'取数标志
Dim i
Dim x, y, z As Integer
Randomize()
arr(0) = 1
For i = 1 To n
Do
'找到x的位置,y表示x在数组的第几个字节,z表示x在该字节的第几位
x = Int(Rnd() * (NumMax - NumMin + 1)) + NumMin
y = x - NumMin
z = 2 ^ (y Mod 8)
y = y \ 8
Loop While b(y) And z
b(y) = b(y) Or z
arr(i) = x
'找到未取的数,并放入数组,设置标志位
Next i
End If
Return arr
End Function
只要在代码中使用随机函数即可实现随机抽取功能
一、vb随机数生成的方法
vb随机数生成函数是 Rnd[(number)],number 参数为可选项。在调用 Rnd 生成随机数之前,先使用 Randomize 初始化随机数生成器来产生种子,该生成器是根据系统计时器来产生种子的。
1、生成100以内的随机数
Randomize
Int(Rnd() * 100)//生成 0 - 99 之间的随机数
Int(Rnd() * 101)//生成 0 - 100 之间的随机数
2、生成指定范围随机数
由于 vb 没有提供直接生成指定范围随机数的函数,所以要把 Rnd 变通一下,方法如下:
Int((上限 - 下限 + 1) * Rnd + 下限);
把它封装成可直接调用的函数如下:
Function GetRandom(under, over As Integer) As Integer
If under over Then
temp = under;
under = over;
over = temp;
End If
Randomize
GetRandom = Int((under - over + 1) * Rnd + over);
End Function
调用方法:
GetRandom(10, 100);//生成10到100的随机数
二、vb.net生成随机数的方法
1、方法:Random.Next(int minValue, int maxValue);
2、说明:
若 minValue 和 maxValue 都没有提供,则生成一个 0 - 2147483647 之间的随机数;
若 minValue 和 maxValue 只提供一个,则生成一个 0 - maxValue 之间的随机数;
若 minValue 和 maxValue 两个都提供,则生成一个 minValue - maxValue 之间的随机数;
3、举例
Dim ran = New System.Random()
ran.Next()//生成 0 - 2147483647 之间的随机数
ran.Next(100)//生成 0 - 100 之间的随机数
ran.Next(10, 100)//生成 10 - 100 之间的随机数
Dim ran = New Random(DateTime.Now.Millisecond)//通过日期的微秒生成随机数