我写了一个程序,希望在0到21之间产生随机整数,产生22次,而且每次产生的随机数不一样,不知道怎么控制。请大家帮忙。
下面是代码:
import java.util.Random;
import java.util.*;class RandomTest2
{
        Vector v=new Vector();
        Random r=new Random();
        
        public RandomTest2()
        {
                double a[]=new double[22];
        double moneyValue[]={0.01,0.1,0.5,1,5,10,50,100,250,500,750,1000,3000,
                          5000,10000,15000,20000,35000,50000,75000,100000,
                          250000};        
        int i=0;
        for(int j=0;j<22;j++)
        {
                        int n=r.nextInt(21);
                        v.addElement((Object)n);
                        i=compare(v,n);
                        
                        a[i]=moneyValue[j];
                    System.out.println("a["+i+"]"+"="+a[i]);
              }
              
        }
        
        public int compare(Vector v,int i)
        {
                int k=0;
                Enumeration e=v.elements();
                while(e.hasMoreElements())
                {
                        if(e.nextElement().equals((Object)i))
                        {}
                        else
                        { k=i;}
                }
                return k;
        }        
        
        public static void main(String args[])
        {
                RandomTest2 app=new RandomTest2();
        }
}运行结果之一如下:
a[0]=0.01
a[18]=0.1
a[7]=0.5
a[1]=1.0
a[11]=5.0
a[19]=10.0
a[15]=50.0
a[18]=100.0
a[5]=250.0
a[5]=500.0
a[14]=750.0
a[13]=1000.0
a[17]=3000.0
a[19]=5000.0
a[10]=10000.0
a[8]=15000.0
a[10]=20000.0
a[7]=35000.0
a[18]=50000.0
a[19]=75000.0
a[3]=100000.0
a[19]=250000.0
我希望没有重复的a[ i ]。我对random的应用特别不熟悉,请多多赐教!

解决方案 »

  1.   

    改两个地方
    上面
     Random r=new Random(System.currentTimeMillis());
    下面
    int i = Math.abs(r.nextInt()%22);
      

  2.   

    不太明白你是什么意识
     compare(Vector v,int i);
    干什么用呀
      

  3.   

    用数组就行了,干吗用vector,杀鸡用牛刀。
      

  4.   

    Random r=new Random(System.currentTimeMillis());

     Random r=new Random(); 等价Random产生的是伪随机数,只要种子一样,产生的序列是一样的.!
      

  5.   

    public Random(long seed) {
            this.seed = AtomicLong.newAtomicLong(0L);
            setSeed(seed);
        }???
      

  6.   

    你的compare()方法有问题,自己好好思考一下吧:)
      

  7.   

    import java.util.Random;
    public class RandomTest
    {
    public static void main(String args[])
    {
    int s[] = randoms();
    for(int i=0;i<s.length;i++)
    System.out.println(s[i]);

    }
    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;
    }
    }
    运行结果
    11
    13
    1
    6
    2
    9
    21
    5
    16
    17
    14
    15
    10
    7
    12
    8
    4
    3
    18
    0
    19
    20