关于随机数的问题请教

[复制链接]
查看11 | 回复4 | 2020-10-28 15:00:35 | 显示全部楼层 |阅读模式
String tmjh="(";//保存取出的随机数
int rztms=80; //求80个数字
int maxtms=100; //在100范围内
String sjnum="";//当前取出的随机数
Random Rnd=new Random();
for(int i=0;i0; i--){

tmjh += list.remove(random.nextInt(j--)) + ",";
}
tmjh = tmjh.substring(0, tmjh.length()-1) + ")";
System.out.println(tmjh);
[ 本帖最后由 bhan2008 于 2008-9-25 14:18 编辑 ]
回复

使用道具 举报

千问 | 2020-10-28 15:00:35 | 显示全部楼层
发现,如果你要取的数接近你的那个范围,再通过那个while去判断,会很慢很慢,因为随机出来的数到尾的时候,很难找一个不相同的。
所以,我改成了,如果取的数大于范围/2,我就反过来
if(rztms>(maxtms/2)){
for(int i=0;i<maxtms-rztms;i++)
{
sjnum=(Rnd.nextInt(maxtms)+1)+"";
while(tmjh.indexOf(sjnum)!=-1)
{
sjnum=(Rnd.nextInt(maxtms+1)+1)+"";
}
if(i==0)
tmjh+="'"+sjnum+"'";
else
tmjh+=",'"+sjnum+"'";
}
tmjh+=")";

for(int ii=1;ii<=maxtms;ii++){
if(tmjh.indexOf("'"+String.valueOf(ii)+"'")==-1){
tmjh2+="'"+ii+"',";
}
}
tmjh2=tmjh2.substring(0,tmjh2.length()-1);
tmjh2+=")";
}
else{
for(int i=0;i<rztms;i++)
{
sjnum=(Rnd.nextInt(maxtms)+1)+"";
while(tmjh2.indexOf(sjnum)!=-1)
{
sjnum=(Rnd.nextInt(maxtms+1)+1)+"";
}
if(i==0)
tmjh2+=sjnum;
else
tmjh2+=","+sjnum;
}
tmjh2+=")";
}
回复

使用道具 举报

千问 | 2020-10-28 15:00:35 | 显示全部楼层
List[I] list1 = new ArrayList[I]();
List[I] list2 = new ArrayList[I]();
int temp;
boolean ab;
Random random = new Random();
for(int i=0; i<maxtms; i++){

list1.add(i);
}
do{
int temp = random.next(100);
ab=list1.remove(temp);
if(ab)
list2.add(temp)
}while(list2.length<=80)
for(int i;i<80:i++){
System.out.println(list2.get(i));
System.out.println("");
}
[ 本帖最后由 xieye 于 2008-9-25 18:29 编辑 ]
回复

使用道具 举报

千问 | 2020-10-28 15:00:35 | 显示全部楼层
这个效率不知道多少 没试过~~
回复

使用道具 举报

千问 | 2020-10-28 15:00:35 | 显示全部楼层
等会试试
呵呵,反正知道了这个规律就行
可能你这个效率要高些
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行