zoukankan      html  css  js  c++  java
  • 160511、生成8位随机不重复的数字编号的方法

    import java.util.Random;

    public class RandomNumberGenerator {
    /**
    * 这是典型的随机洗牌算法。 流程是从备选数组中选择一个放入目标数组中,将选取的数组从备选数组移除(放至最后,并缩小选择区域) 算法时间复杂度O(n)
    * @return 随机8为不重复数组
    * @author RICK
    */
    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());
    }
    }
    }

  • 相关阅读:
    进制转化
    递归小结
    Java异常处理面试题归纳
    字符串相加 内存分配
    递归与循环
    cookie
    会话管理
    在javaweb中通过servlet类和普通类读取资源文件
    JS中遍历EL表达式中后台传过来的Java集合
    Ztree加载完成后显示勾选节点
  • 原文地址:https://www.cnblogs.com/zrbfree/p/5495741.html
Copyright © 2011-2022 走看看