class RandomNum
{
int a,b,c;
RandomNum()
{
for(int i=0;i<54;i++)
{
b=(int)(Math.random()*1000 % 54 + 1);
System.out.print(b+",");
}
}
public static void main(String args[])
{
new RandomNum();
}
}这样还是有可能有重复的,不行你就把每次生成的随机数记录到一个数组中,下一次生成随机数后先到数组中查一下,如果已经存在就舍弃重新生成一个。
{
int a,b,c;
RandomNum()
{
for(int i=0;i<54;i++)
{
b=(int)(Math.random()*1000 % 54 + 1);
System.out.print(b+",");
}
}
public static void main(String args[])
{
new RandomNum();
}
}这样还是有可能有重复的,不行你就把每次生成的随机数记录到一个数组中,下一次生成随机数后先到数组中查一下,如果已经存在就舍弃重新生成一个。
我试了不行!你说的用数组保存生成的值,然后判断,我怎么判断呀,可以给出代码吗?谢谢!
随机数是生成0到1之间的数,可以生成0,但是不会是1,故当随机数为0时,则+1防止生成0,懂否!
{
int a,b,c;
int m[]=new int[54];
RandomNum()
{
for(int i=0;i<54;i++)
{
b=(int)(Math.random()*54+1);
for(int a=0;a<i;a++)
{
if(m[a]!=b)
m[i]=b;
}
System.out.print(m[i]+",");
}
}
public static void main(String args[])
{
new RandomNum();
}
}
我又写了个,但是打印出来的结果还是有重复的呀!来个高手给个提示呀,那里有错呀!
import java.util.Random;
public class RandomT
{
public static void main(String [] args)
{
Random rand=new Random();
ArrayList<Integer>t=new ArrayList<Integer>();
int [] a=new int[54];
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);
}
for(int i=0;i<54;i++)
System.out.print(a[i]+" ");
}
}
我运行了下是没有重复的。
ArrayList<Integer>t=new ArrayList<Integer>();这行代码不懂什么意义呀,可以给解释下吗
{
t.add(i+1);
}
for(int i=54;i>0;i--)
{
int n=rand.nextInt(i);
a[54-i]=t.remove(n);
}
这2个循环也没看懂,我没用过ArrayList
这个只不过是一个动态的数组,他完全可以一般的数组来实现,只不过我偷懒了一点,可以少些代码。
和c++的vector是一样的。
如果你还不明白的花,看一下java的关于collection的文章
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];
一定没有重复的。
就当作是洗牌了。
我查了api没查到有这个关键字的!
Vector result = new Vector() ;
while(result.size()<size){
int b=((int)(Math.random()*100))%size+1;
result.add(String.valueOf(b));
}
return result;
}
你的办法是说往那个Vector集合对象里添加生成的随机数当Vector集合对象的大小小于给定的数则继续添加,但是我感觉还是有重复的
你的那个方法不行呀,我刚才试了,有重复的
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
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) + "-");
}
//显示效果
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());
vNew.add(v.get(i));
v.remove(i);
为什么那个while循环里面先添加i然后又删除i呀
就是这里看不懂
可以给解释下吗?谢谢了
就相当于,从一副牌里一张一张地随机的向外抽取,形成了一副已经乱序的新牌~~~
谢谢,现在已经明白了。 thrive_li() ( ) 信誉:100
是的,看别人发贴里面说1.5以后的版本才支持<>"范型"
java.util.Collections.shuffle(arraylist);
{
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();
}
}
这个简单了吧!!!