我想从1-100之间随机抽取 10个数字,这10个数字当中不能有0,不能重复,而且输入时这10个数字必须是int类型的。请问这个应该如何实现?

解决方案 »

  1.   

    把100个数值压到map中,随机map的索引,每随机一次,把随到的从map中删掉,
      

  2.   

    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;  
    }  
    }  
      

  3.   

    可以用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);
    }
    }
      

  4.   

    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;
        }
      

  5.   

    用map的话压100个Integer进去空间消耗是没法变小的 空间换时间 彼此彼此 另外除极端情况外 你new 100个integer对象的时间只怕还要远胜于我
      

  6.   

    帮忙纠正点小错误,
    1-100 应该(int) (Math.random()*101)
    1-50 应该(int) (Math.random()*51)