练习——获取随机字符数组
需求
随机生成类似百度网盘提取码的四位密码,包含字母和数字。
示例代码
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) |
| 封装建议 | 将生成逻辑封装为方法,可指定长度,多次调用 |
提示:如需生成不重复字符的密码,需加入去重判断。
Previous: 练习——封装一个求数组最大值的函数
Next: 面向对象的理解