Java随机数问题

qicaihuochai 2009-07-20 02:46:48
我想从1-100之间随机抽取 10个数字,这10个数字当中不能有0,不能重复,而且输入时这10个数字必须是int类型的。

请问这个应该如何实现?
...全文
134 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qicaihuochai 2009-07-21
  • 打赏
  • 举报
回复
都是牛人!
lasfrost 2009-07-20
  • 打赏
  • 举报
回复
帮忙纠正点小错误,
1-100 应该(int) (Math.random()*101)
1-50 应该(int) (Math.random()*51)
knightzhuwei 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qicaihuochai 的回复:]
楼上的兄弟,你的代码能够实现随机数生成。但是里面出现了0。而且,你用*100的方法能够保证,当我想选择1-50以内的数字的时候它能够有效吗?

[/Quote]
零的问题很好解决 我就不多言了
你想选择1-50就把100换成50嘛 不是一样的事情
knightzhuwei 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 rascalboy520 的回复:]
3楼的,没有考虑重复的问题,程序运行的过程中,会有很多重复的,虽然从结果中看不出来,但效率会有影响的.当随机到一个重复的数值时,按3楼的方法,就要再重复随机一次,
[/Quote]
用map的话压100个Integer进去空间消耗是没法变小的 空间换时间 彼此彼此 另外除极端情况外 你new 100个integer对象的时间只怕还要远胜于我
qicaihuochai 2009-07-20
  • 打赏
  • 举报
回复
那么5楼的意思是什么呢?
bigbug9002 2009-07-20
  • 打赏
  • 举报
回复
import java.util.*;

public class test6{
public static void main(String [] args) {
int[] arr=intData(1,100,10);
System.out.println(Arrays.toString(arr));

}
/*产生一个长度为num的int数组,数组元素的值在start~end之间,元素不重复。
*
*/
public static int[] intData(int start,int end,int num){
int[] a=new int[num];
int i=0;
Random rand=new Random();

while(i<num){
int x=rand.nextInt(end-start+1)+start;
/*
*不知道你的意思,如果不是说数的每一位中不含零,把下一句注掉就可以了。
*/
if(hasZero(x)) continue;
boolean isRepeated=false;
for(int j=0;j<i;j++){
if(x==a[j]){
isRepeated=true;
break;
}
}
if(!isRepeated){
a[i++]=x;
}
}
return a;
}
/*
*判断x各位中是不是有零。
*/
public static boolean hasZero(int x){
boolean has=false;
int n;
while(x!=0){
n=x%10;
if(n==0){
has=true;
break;
}
x=x/10;
}
return has;
}

rascalboy520 2009-07-20
  • 打赏
  • 举报
回复
3楼的,没有考虑重复的问题,程序运行的过程中,会有很多重复的,虽然从结果中看不出来,但效率会有影响的.当随机到一个重复的数值时,按3楼的方法,就要再重复随机一次,
qicaihuochai 2009-07-20
  • 打赏
  • 举报
回复
楼上的兄弟,你的代码能够实现随机数生成。但是里面出现了0。而且,你用*100的方法能够保证,当我想选择1-50以内的数字的时候它能够有效吗?
knightzhuwei 2009-07-20
  • 打赏
  • 举报
回复
可以用Set保证不重复
import java.util.HashSet;
public class TestRandom {
public static void main(String[] args) {
HashSet<Integer> hs=new HashSet<Integer>();
while(hs.size()<10){
int i=(int)(Math.random()*100);
hs.add(i);
}
System.out.println(hs);
}
}
邵钏 2009-07-20
  • 打赏
  • 举报
回复
ref: http://thunderbow.javaeye.com/blog/256838

一种方法,在一个待选数组中随机产生一个数,然后把他放到待选数组的最后,然后从length-1里随机产生下一个随机数,如此类推


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;
}
}
rascalboy520 2009-07-20
  • 打赏
  • 举报
回复
把100个数值压到map中,随机map的索引,每随机一次,把随到的从map中删掉,

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧