zoukankan      html  css  js  c++  java
  • 生成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());  
                }  
            }  
        }  


  • 相关阅读:
    在插入一条记录后 取得自动增长ID
    hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些
    单例模式
    聚簇索引与非聚簇索引的区别
    基于SQL SERVER2008的SCCM2007部署
    XML架构下的表结构设置主键
    IE6与IE7下一点样式的区别
    Session丢失原因与解决方案小结
    Python_如何去除字符串里的空格
    Python_让人脑阔疼的编码问题(转)+(整理)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3313237.html
Copyright © 2011-2022 走看看