可以这样,先把1-21存入Vector,再随机抽,抽一个删一个,产生的范围也相应的减少1,直到只有一个为止

解决方案 »

  1.   

    一个简单的方法 数组保存,
    第一次随机下标0到n-1, 把数组最后的一个数字填充到被取掉的位置上,
     之后呢就继续随机数组下标0到n-2
    以前在csdn上看到的. /*public static void main(String[] args) {
            //int[] num ={22,33,44,32,99,56};
            int []num=new int[4];
            for(int k=0;k<num.length;k++)
                num[k]=k+1;
             
            int n = num.length;
            int[] result = new int[n];
            for(int i=0;i<result.length;i++) {
                int r = (int)(Math.random()*n);
                result[i] = num[r];  
                num[r] = num[n-1];  //move the last element to the location r.
                n--;
                System.out.print(result[i]+" "); //print
            }
        }*/
      

  2.   

    将产生的随机数放在hashtable中,每次判断一下,如果有就跳过.
      

  3.   

    用Vecotor,HashTable都是可以的,
    你把取出来的数先用它们存起,然后再随机产生一个数,再去比较,如存在相同的,就重新再产生一个随机数,如果不存呢,则加入。
    这是思想,至于编程实现,岂不是一件很简单的事情啦!
      

  4.   

    java的ramdom 如果知时间内调用会产生重复,楼主你必须每次调用中sleep100毫秒就行