import java.util.Arrays;
import java.util.Random;
public class VerificationCode {
public static void main(String[] args) {
String[] CHARS = { "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L",
"M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y" };
boolean[] charFlags = new boolean[CHARS.length];
String[] verifyCodes = new String[6];
Random ran = new Random();
for (int i = 0; i < verifyCodes.length; i++) {
int index;
do {
index = ran.nextInt(CHARS.length);
} while (charFlags[index]);
verifyCodes[i] = CHARS[index];
charFlags[index] = true;
}
//这段代码求解释 看不懂
System.out.print("验证码为:");
for (int i = 0; i < verifyCodes.length; i++) {
System.out.print(verifyCodes[i]);
}
}
}
2 回答
弑天下
TA贡献1818条经验 获得超8个赞
具体是哪一行看不懂呢?
这个就是声明了一个验证码可取值数组CHARS
charFlags 的每个值对应了每个char是否已经用到过。(这里的目的是生成的验证码不会出现重复字符比如AA1234,两个A重复了)
verifyCodes是最终生成的验证码数组。
代码逻辑翻译过来就是:
每次从CHARS里面取一个字符,看这个字符是否已经用过,没有用过就放到最终的验证码数组verifyCodes中。然后取下一个,如果从CHARS中取出的字符已经用过,则再随机生成一个下标,重新取一个字符。直到取到6个不重复的字符为止。
墨色风雨
TA贡献1853条经验 获得超6个赞
搞双重循环是很低效的一个事, 如果验证码再长点, 某一位可能会长时间不出现, 不知作者为什么这么做? 为了更好的随机性? 原代码的核心是避免同一个字符重复出现
改成这样就会好理解:
import java.util.Arrays;
import java.util.Random;
public class VerificationCode {
public static void main(String[] args) {
char[] CHARS = { '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L',
'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y' };
char[] verifyCodes = new char[6];
Random ran = new Random();
for (int i = 0; i < verifyCodes.length; i++) {
verifyCodes[i] = CHARS[ran.nextInt(CHARS.length)];
}
System.out.print("验证码为:");
System.out.print(new String(verifyCodes));
}
}
添加回答
举报
0/150
提交
取消
