生成8位随机不重复的数字编号

package com.jjinfo.common.util;  
    import java.util.Arrays;  
    import java.util.Random;  
      
    /** 
     * 
     */  
    public class RandomNumberGenerator {  
      
        /** 
         * 这是典型的随机洗牌算法。 
         * 流程是从备选数组中选择一个放入目标数组中,将选取的数组从备选数组移除(放至最后,并缩小选择区域) 
         * 算法时间复杂度O(n) 
         * @return 随机8为不重复数组 
         */  
        public static String generateNumber() {  
            String no="";  
            //初始化备选数组  
            int[] defaultNums = new int[10];  
            for (int i = 0; i < defaultNums.length; i++) {  
                defaultNums[i] = i;  
            }  
      
            Random random = new Random();  
            int[] nums = new int[LENGTH];  
            //默认数组中可以选择的部分长度  
            int canBeUsed = 10;  
            //填充目标数组  
            for (int i = 0; i < nums.length; i++) {  
                //将随机选取的数字存入目标数组  
                int index = random.nextInt(canBeUsed);  
                nums[i] = defaultNums[index];  
                //将已用过的数字扔到备选数组最后,并减小可选区域  
                swap(index, canBeUsed - 1, defaultNums);  
                canBeUsed--;  
            }  
            if (nums.length>0) {  
                for (int i = 0; i < nums.length; i++) {  
                    no+=nums[i];  
                }  
            }  
      
            return no;  
        }  
        private static final int LENGTH = 8;  
      
        private static void swap(int i, int j, int[] nums) {  
            int temp = nums[i];  
            nums[i] = nums[j];  
            nums[j] = temp;  
        }  
          
        public static String generateNumber2() {  
            String no="";  
            int num[]=new int[8];  
            int c=0;  
            for (int i = 0; i < 8; i++) {  
                num[i] = new Random().nextInt(10);  
                c = num[i];  
                for (int j = 0; j < i; j++) {  
                    if (num[j] == c) {  
                        i--;  
                        break;  
                    }  
                }  
            }  
            if (num.length>0) {  
                for (int i = 0; i < num.length; i++) {  
                    no+=num[i];  
                }  
            }  
            return no;  
        }  
      
        public static void main(String[] args) {  
            for (int i = 0; i < 10; i++) {  
    //            System.out.println(generateNumber());  
                System.out.println(generateNumber2());  
            }  
        }  
    }

你可能感兴趣的:(生成8位随机不重复的数字编号)