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


  • 相关阅读:
    mySQL如何在查询的结果前添加序号
    bootstrap 列表前添加序号 1.10版本
    sql 如何优先显示不为空的字段 并进行排序
    java面向对象总结
    线程总结(二)
    数据库索引介绍(转载)
    线程总结(一)
    GUI图形界面编程之事件处理机制
    Eclipse快捷键大全(转载)
    JDBC数据库编程总结
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3313237.html
Copyright © 2011-2022 走看看