练习——获取随机字符数组

练习——获取随机字符数组

需求

随机生成类似百度网盘提取码的四位密码,包含字母和数字。

示例代码

public static void main(String[] args) {
    char[] c = {'a','b','c','d','e','f','g','h','i','j'
            ,'k','l','m','n','o','p','q','r','s','t','u'
            ,'v','w','x','y','z','0','1','2','3','4','5'
            ,'6','7','8','9'};
    char[] m = new char[4];
    for (int i = 0; i < m.length; i++) {
        int r = (int)(Math.random() * c.length);
        m[i] = c[r];
    }
    for (int i = 0; i < m.length; i++) {
        System.out.print(m[i]);
    }
}Code language: JavaScript (javascript)

输出示例:

x7k2

逻辑拆解

步骤说明
定义字符池c 数组包含所有小写字母和数字,共 36 个字符
创建结果数组m 为长度为 4 的字符数组,存放生成的密码
随机取值每次循环生成一个 0 到 c.length-1 的随机下标,从字符池中取字符
赋值将取出的字符放入结果数组 m[i]
输出遍历 m 数组,逐个打印字符

封装为可复用的方法

public static char[] generateCode(int length) {
    char[] pool = {'a','b','c','d','e','f','g','h','i','j'
            ,'k','l','m','n','o','p','q','r','s','t','u'
            ,'v','w','x','y','z','0','1','2','3','4','5'
            ,'6','7','8','9'};
    char[] result = new char[length];
    for (int i = 0; i < length; i++) {
        int r = (int)(Math.random() * pool.length);
        result[i] = pool[r];
    }
    return result;
}

// 调用
public static void main(String[] args) {
    char[] code = generateCode(4);
    for (char ch : code) {
        System.out.print(ch);
    }
}Code language: JavaScript (javascript)

扩展:包含大写字母

char[] pool = {'a','b','c','d','e','f','g','h','i','j'
        ,'k','l','m','n','o','p','q','r','s','t','u'
        ,'v','w','x','y','z'
        ,'A','B','C','D','E','F','G','H','I','J'
        ,'K','L','M','N','O','P','Q','R','S','T'
        ,'U','V','W','X','Y','Z'
        ,'0','1','2','3','4','5','6','7','8','9'};Code language: JavaScript (javascript)

注意事项

要点说明
字符池完整性原文代码中遗漏了字母 u,已修正
随机范围Math.random() * c.length 确保下标不越界
可重复字符每次独立随机,允许生成重复字符(如 a3a7)
封装建议将生成逻辑封装为方法,可指定长度,多次调用

提示:如需生成不重复字符的密码,需加入去重判断。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注