WPF产生不重复的随机数,wpf重复随机数
WPF产生不重复的随机数,wpf重复随机数
WPF产生不重复的随机数
在给定的区间范围(比如[50,99]),产生给定数量的随机数(不如10个),要求产生的随机数不重复首先给定变量
min=50;
max=99+1;//习惯与程序规定的编码不同所致
n=10;
好了,上代码
1.xaml界面格式
<Grid> <TextBlock x:Name="tb_Screen" HorizontalAlignment="Left" Margin="59,24,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/> <Button x:Name="tb_Create" Content="Button" HorizontalAlignment="Left" Margin="144,259,0,0" VerticalAlignment="Top" Width="75" Click="tb_Create_Click"/> <TextBox x:Name="txt_min" HorizontalAlignment="Left" Height="23" Margin="80,92,0,0" TextWrapping="Wrap" Text="50" VerticalAlignment="Top" Width="70" RenderTransformOrigin="0.462,2.179"/> <TextBox x:Name="txt_max" HorizontalAlignment="Left" Height="23" Margin="257,92,0,0" TextWrapping="Wrap" Text="99" VerticalAlignment="Top" Width="82" RenderTransformOrigin="1.018,0.43"/> <TextBlock HorizontalAlignment="Left" Margin="10,95,0,0" TextWrapping="Wrap" Text="min=" VerticalAlignment="Top"/> <TextBlock HorizontalAlignment="Left" Margin="186,95,0,0" TextWrapping="Wrap" Text="max=" VerticalAlignment="Top"/> <TextBox x:Name="txt_n" HorizontalAlignment="Left" Height="23" Margin="121,149,0,0" TextWrapping="Wrap" Text="10" VerticalAlignment="Top" Width="120"/> <TextBlock HorizontalAlignment="Left" Margin="31,152,0,0" TextWrapping="Wrap" Text="数量" VerticalAlignment="Top"/> </Grid>
详细说明:http://wp.662p.com/thread-8107-1-1.html
主要是要利用数组下标
第一次:从0至23取随机数,例如:8,把idlength[8]中的值放到result[0],然后把idlength[24]中的值放到idlength[8]。
第二次,从0至22取随机数。。。。。
int[] idlength = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24 };
int[] result=new int[10];
for (int i = 1; i <= 10; i++)
{
Random random = new Random(DateTime.Now.Millisecond);
int rang = 24 - i;//随机数下标的范围
int index= random.Next(0, rang);//随机获取一个0到rang的下标
result[i - 1] = idlength[index];//取值赋给result
idlength[index] = idlength[rang];
}
不写具体代码了,没意思,就说下算法吧。这种要求不重复随机数一般是采用随机洗牌算法。
例:在一个数组中依次放入1~10的数,然后通过循环随机打乱(方法很多,比如随机两个数组下标然后交换),一定次数循环后依次读取此数组中的数,得到的就是不重复随机的1~10之间的数了。
楼上两位的方法都效率太低,在几十个数的小规模下还可以,数多了就不行了。
用户评论