JAVA生成不重复的随机数

学习java的基本功:随机生成不重复的数字是一个简单的利用for循环就可以做出来的!下面说说几种思路;
第一种:利用for循环和random随机生成数字的方法就可以;注意怎么过滤重复;要用到数组;每添加一个数字都要和以前的数字相比较;如果有和以前相等的;则该次循环不算;可以用i--来取消该次循环;
第二种:上面那种做法虽然也可以得出结果;但是效率太低;可以利用java中一个hashset集合自动过滤重复;效率高
第三种:这种算法效率也很高;比如要生成7个1-36的随机不重复数字;我们可以把1-36这些数字存储在一个数组中;都知道要取出数组中的元素靠的是下标;比如arr[0],arr[5];等;如果能随机得到一个下标数字;就可以取出1-36中的任意一个数字了;关于重复问题我们可以每取出一个数字就把数组的最后一个数字替换刚取走的那个位置上;这样就不会出现重复的问题了;这样我们的for循环也只需要7次就够了;

 

 

附源代码如下:

public class Test   
{   
  
    public static void main(String[] args)   
    {   
        int[] arr = new int[10];   
  
        for (int i = 0; i < 10; i++)   
        {   
            arr[i] = (int) (Math.random() * 40) + 1;   
            for (int j = 0; j < i; j++)   
            {   
                if (arr[j] == arr[i])   
                {   
                    i--;   
                    break;   
                }   
            }   
        }   
        for (int i = 0; i < 10; i++)   
            System.out.print(arr[i] + " ");   
    }   
}   
  
  
b.    
  
Java code    
  
  
import   java.util.*;    
public   class   Test    
{    
           
        public   static   void   main(String[]   args)    
        {    
                int   n=40;    
                int[]   num   =   new   int[n];    
                for(int   i=0;i <num.length;i++)    
                        num[i]   =   i+1;    
                int[]   arr   =   new   int[10];    
                for(int   i=0;i <arr.length;i++)    
                {    
                        int   r   =(int)(Math.random()*n);    
                        arr[i]=num[r];    
                        num[r]=num[n-1];    
                        n--;    
                }    
                for(int   i=0;i <arr.length;i++)    
                        System.out.print(arr[i]+"   ");    
        }    
}    
  
  
  
  
c.    
  
Java code    
  
  
import   java.util.*;    
public   class   Test    
{    
           
        public   static   void   main(String[]   args)    
        {    
                LinkedList <Integer>   myList=   new   LinkedList <Integer> ();    
                int   n=40;    
                for(int   i=0;i <n;i++)    
                        myList.add(i+1);    
                int[]   arr   =   new   int[10];    
                for(int   i=0;i <arr.length;i++)    
                {    
                        arr[i]=myList.remove((int)(Math.random()*n));    
                        n--;    
                }    
                for(int   i=0;i <arr.length;i++)    
                {    
                        System.out.print(arr[i]+"   ");    
                }    
        }    
}    
  
  
  
  
d.    
  
Java code    
  
  
import   java.util.*;    
public   class   Test    
{    
           
        public   static   void   main(String[]   args)    
        {    
                Set <Integer>   mySet   =   new   LinkedHashSet <Integer> ();    
                while(mySet.size() <10)    
                {    
                        mySet.add((int)(Math.random()*40+1));    
                }    
                for(Integer   i:mySet)    
                {    
                        System.out.print(i+"   ");    
                }    
        }    
  
}  

public class Test 


    public static void main(String[] args) 
    { 
        int[] arr = new int[10]; 

        for (int i = 0; i < 10; i++) 
        { 
            arr[i] = (int) (Math.random() * 40) + 1; 
            for (int j = 0; j < i; j++) 
            { 
                if (arr[j] == arr[i]) 
                { 
                    i--; 
                    break; 
                } 
            } 
        } 
        for (int i = 0; i < 10; i++) 
            System.out.print(arr[i] + " "); 
    } 



b. 

Java code 


import   java.util.*; 
public   class   Test 

        
        public   static   void   main(String[]   args) 
        { 
                int   n=40; 
                int[]   num   =   new   int[n]; 
                for(int   i=0;i <num.length;i++) 
                        num[i]   =   i+1; 
                int[]   arr   =   new   int[10]; 
                for(int   i=0;i <arr.length;i++) 
                { 
                        int   r   =(int)(Math.random()*n); 
                        arr[i]=num[r]; 
                        num[r]=num[n-1]; 
                        n--; 
                } 
                for(int   i=0;i <arr.length;i++) 
                        System.out.print(arr[i]+"   "); 
        } 





c. 

Java code 


import   java.util.*; 
public   class   Test 

        
        public   static   void   main(String[]   args) 
        { 
                LinkedList <Integer>   myList=   new   LinkedList <Integer> (); 
                int   n=40; 
                for(int   i=0;i <n;i++) 
                        myList.add(i+1); 
                int[]   arr   =   new   int[10]; 
                for(int   i=0;i <arr.length;i++) 
                { 
                        arr[i]=myList.remove((int)(Math.random()*n)); 
                        n--; 
                } 
                for(int   i=0;i <arr.length;i++) 
                { 
                        System.out.print(arr[i]+"   "); 
                } 
        } 





d. 

Java code 


import   java.util.*; 
public   class   Test 

        
        public   static   void   main(String[]   args) 
        { 
                Set <Integer>   mySet   =   new   LinkedHashSet <Integer> (); 
                while(mySet.size() <10) 
                { 
                        mySet.add((int)(Math.random()*40+1)); 
                } 
                for(Integer   i:mySet) 
                { 
                        System.out.print(i+"   "); 
                } 
        } 



Java代码 
第一种方法,在一个待选数组中随机产生一个数,然后把他放到待选数组的最后,然后从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;   
}   
}   
  
  
方法二:还是一个固定的无重复的数组,然后把这个数组随机调换位置,多次之后这个数组就是一个无重复的随机数组了。   
  
public static int[] random2()   
{   
   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 temp1,temp2,temp3;   
   Random r = new Random();   
   for(int i=0;i<send.length;i++) //随机交换send.length次   
   {   
    temp1 = Math.abs(r.nextInt())%(send.length-1); //随机产生一个位置   
    temp2 = Math.abs(r.nextInt())%(send.length-1); //随机产生另一个位置   
    if(temp1 != temp2)   
    {   
     temp3 = send[temp1];   
     send[temp1] = send[temp2];   
     send[temp2] = temp3;   
    }   
   }   
   return send;   
}  

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值