站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题生成无重复随机数的2种方法

生成无重复随机数的2种方法

摘要: 生成无重复随机数的2种方法

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="488" height="86" align="left" valign="top">

第一种方法,在一个待选数组中随机产生一个数,然后把他放到待选数组的最后,然后从length-1里随机产生下一个随机数,如此类推 <table style="WIDTH: 497px; HEIGHT: 342px" cellSpacing=1 cellPadding=1 width=497 summary="" border=1> <tr> <td>

public static int[] randoms()
{
Random r = new Random();

int temp1,temp2;
int send[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};
int len = send.length;
int returnValue[] = new int[22];
for(int i=0;i<22;i++)
{
temp1 = Math.abs(r.nextInt())% len;
returnValue[i] = send[temp1];
temp2 = send[temp1];
send[temp1] = send[len-1];
send[len-1] = temp2;
len--;
}
return returnValue;
}
}

</td> </tr> </table>

方法二:还是一个固定的无重复的数组,然后把这个数组随机调换位置,多次之后这个数组就是一个无重复的随机数组了。

<table style="WIDTH: 498px; HEIGHT: 324px" cellSpacing=1 cellPadding=1 width=498 summary="" border=1> <tr> <td>

public static int[] random2()
{
int send[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};
int temp1,temp2,temp3;
Random r = new Random();
for(int i=0;i {
temp1 = Math.abs(r.nextInt())%(send.length-1); //随机产生一个位置
temp2 = Math.abs(r.nextInt())%(send.length-1); //随机产生另一个位置
if(temp1 != temp2)
{
temp3 = send[temp1];
send[temp1] = send[temp2];
send[temp2] = temp3;
}
}
return send;
}

一次测试:

C:\java>java Test
5 7 11 3 6 14 20 21 17 1 10 0 2 4 16 8 12 15 18 9 19 13
18 10 9 13 3 16 14 5 15 12 8 11 4 7 17 0 2 20 1 19 6 21

</td> </tr> </table> </td> <td width="196" valign="top"> </td> </tr> </table> </td> </tr> <tr>


↑返回目录
前一篇: 类似按键精灵的程序
后一篇: 又一个吃豆子游戏源码