让生成的随机数不重复,我该怎么该代码!急上加急!

hawaii_wx 2005-04-12 07:55:47
我的代码如下:
class RandomNum
{
int a,b,c;
RandomNum()
{

for(int i=0;i<54;i++)
{
b=(int)(Math.random()*54+1);
System.out.print(b+",");
}
}
public static void main(String args[])
{
new RandomNum();
}
}
我测试了下,有重复的数字出现,请问有什么办法,让循环内的数字不重复,而且54个数都要有
...全文
342 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixrun 2005-04-13
  • 打赏
  • 举报
回复
class RandomNum
{
int b;
int m[]=new int[54];
RandomNum()
{
m[0]=(int)(Math.random()*54+1);
System.out.print(m[0]+",");
int i=1;
boolean nofinded=true;
while(i<54)
{
b=(int)(Math.random()*54+1);

for(int j=0;j<i;j++)
{
if(m[j]==b)
{
nofinded=false;
break;
}
else
nofinded=true;
}
if(nofinded)
{
m[i]=b;
System.out.print(m[i]+",");
i++;
}
}
}
public static void main(String args[])
{
new RandomNum();
}
}
这个简单了吧!!!
tangyongtgyg 2005-04-13
  • 打赏
  • 举报
回复
收藏,以后说不定有用!
ChDw 2005-04-13
  • 打赏
  • 举报
回复
呵呵,怎么又是这个发牌的问题,你可以使用
java.util.Collections.shuffle(arraylist);
yonggui111 2005-04-13
  • 打赏
  • 举报
回复
可以用HashSet,HashSet是没有重复数的
hawaii_wx 2005-04-13
  • 打赏
  • 举报
回复
DreamDragon_NEU(梦龙) ( ) 信誉:100
谢谢,现在已经明白了。

thrive_li() ( ) 信誉:100
是的,看别人发贴里面说1.5以后的版本才支持<>"范型"
DreamDragon_NEU 2005-04-13
  • 打赏
  • 举报
回复
把里面的i导出,放入vNew里,然后在把v里的删除~~~
就相当于,从一副牌里一张一张地随机的向外抽取,形成了一副已经乱序的新牌~~~
thrive_li 2005-04-13
  • 打赏
  • 举报
回复
ArrayList<Integer>t=new ArrayList<Integer>();

要jdk1.5才支持吧
hawaii_wx 2005-04-13
  • 打赏
  • 举报
回复
DreamDragon_NEU(梦龙) ( ) 信誉:100
vNew.add(v.get(i));
v.remove(i);
为什么那个while循环里面先添加i然后又删除i呀
就是这里看不懂
可以给解释下吗?谢谢了
topil 2005-04-13
  • 打赏
  • 举报
回复
public HashMap getRadom(int size){
HashMap result = new HashMap() ;

while(result.size()<size){
int b=((int)(Math.random()*100))%size+1;
result.put(String.valueOf(b),"");

}
return result;
}

main函数这样写
HashMap h = a.getRadom(54);

System.out.println(h.keySet());
DreamDragon_NEU 2005-04-13
  • 打赏
  • 举报
回复
Random r = new Random();
Vector v = new Vector();
Vector vNew = new Vector();
int count = 54;
for (int i = 0; i < count; i++) {
v.add("" + i);
}
int i;
while (!v.isEmpty()) {
i = Math.abs(r.nextInt()%count);
vNew.add(v.get(i));
v.remove(i);
count--;
}
//Vector vNew就是你想要的~~~
for (int j = 0; j < vNew.size(); j++) {
System.out.print(vNew.get(j) + "-");
}
//显示效果
hawaii_wx 2005-04-13
  • 打赏
  • 举报
回复
topil(认认真真学习,塌塌实实工作) ( ) 信誉:98
你的那个方法不行呀,我刚才试了,有重复的
public Vector getRadom(int size){
Vector result = new Vector() ;
while(result.size()<size){
int b=((int)(Math.random()*100))%size+1;
result.add(String.valueOf(b));
System.out.print(b+",");
}
return result;
}
在你给你给的方法里面添加了个测试代码,输出结果:
31,34,6,26,15,20,11,23,34,21,3,3,24,6,38,10,33,31,21,23,23,24,1,23,22,16,9,39,18
,42,31,54,20,51,50,30,20,26,31,8,39,38,24,30,43,28,54,28,13,32,41,30,26,22,Press
hawaii_wx 2005-04-13
  • 打赏
  • 举报
回复
topil(认认真真学习,塌塌实实工作) ( ) 信誉:98
你的办法是说往那个Vector集合对象里添加生成的随机数当Vector集合对象的大小小于给定的数则继续添加,但是我感觉还是有重复的
topil 2005-04-13
  • 打赏
  • 举报
回复
public Vector getRadom(int size){
Vector result = new Vector() ;
while(result.size()<size){
int b=((int)(Math.random()*100))%size+1;
result.add(String.valueOf(b));
}
return result;
}
hawaii_wx 2005-04-13
  • 打赏
  • 举报
回复
exchange这个是关键字吗
我查了api没查到有这个关键字的!
taur57 2005-04-13
  • 打赏
  • 举报
回复
既然你就倒这54个数,那不如这样:
for(int i=0;i<54;i++){
a[i]=i;}
for(int i=0;i<100;i++){
int b=(int)(Math.random()*54+1);
int c=(int)(Math.random()*54+1);
exchange a[b],a[c];
一定没有重复的。
就当作是洗牌了。
hawaii_wx 2005-04-12
  • 打赏
  • 举报
回复
我懂你说的意思了,t.add(i+1);是说往t这个容器里面添加对象,但是第二个循环我没看懂,唉,看来我是笨的可以了!
faen 2005-04-12
  • 打赏
  • 举报
回复
关键不是在这儿的。
这个只不过是一个动态的数组,他完全可以一般的数组来实现,只不过我偷懒了一点,可以少些代码。
和c++的vector是一样的。
如果你还不明白的花,看一下java的关于collection的文章
hawaii_wx 2005-04-12
  • 打赏
  • 举报
回复
for(int i=0;i<54;i++)
{
t.add(i+1);
}
for(int i=54;i>0;i--)
{
int n=rand.nextInt(i);
a[54-i]=t.remove(n);
}
这2个循环也没看懂,我没用过ArrayList
hawaii_wx 2005-04-12
  • 打赏
  • 举报
回复
to: faen(发恩) ( ) 信誉:100
我运行了下是没有重复的。
ArrayList<Integer>t=new ArrayList<Integer>();这行代码不懂什么意义呀,可以给解释下吗
faen 2005-04-12
  • 打赏
  • 举报
回复
这样就没有重复了,而且效率o(n)的
加载更多回复(5)

62,634

社区成员

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

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