要求:
生成验证码
* 内容:可以是小写字母,也可以是大写字母,还可以是数字
* 规则:长度为5
* 内容中是四位字母,1位数字。
* 其中数字只有1位,但是可以出现在任意的位置。
package stringtext;
import java.util.Arrays;
import java.util.Random;
/**
* 生成验证码
* 内容:可以是小写字母,也可以是大写字母,还可以是数字
* 规则:长度为5
* 内容中是四位字母,1位数字。
* 其中数字只有1位,但是可以出现在任意的位置。
*/
public class VerificationCode {
public static void main(String[] args) {
Random ra = new Random();
//定义一个char类型数组来存储验证码每个字符
char[] arr=new char[5];
//定义一个int 类型的数组表示验证码字符下标
int[] index=new int[5];
//循环随机生成字符下标0~4不重复的5个数
for (int j = 0; j <index.length ; ) {
//生成0~4的数
int num2 =ra.nextInt(5);
//标记 默认为true
boolean boo=true;
for (int i = 0; i <j ;i++ ) {
//if判断数组里已有的数是否和本次添加数相等
if (index[i] == num2) {
//当程序进到这里的时候 说明数组里有 本次添加数把标记改为false
boo=false;
//直接结束内层循环
break;
}
}
//当程序到这里时boo标记是true 说明数组里没有本次添加数的数
if (boo ) {
//那么就把本次添加数的数到数组中
index[j] = num2;
//只有当数组添加成功的时候j才作++
//如果将j++写在for()里面无论数组里是否有相等的数j都会做++运算
// 当生成到和数组里相同的数时改下标的数不会被赋值,那么数组里会出先多个0(int类型默认值是0)
j++;
}
}
for (int i = 0; i < arr.length-1; ) {
//char类型的a-Z的Ascii码值范围转为int类型是 65-90 97-122
int num1= ra.nextInt(78)+65;
//判断随机数上次的数字是否在范围
if (num1>=65 && num1<90 || num1>=97 && num1<=122) {
//将生成的数字强转为char并存在arr数组中
arr[index[i]]=(char) num1;
i++;
}
}
//随机数生成0-9的数
int num1= ra.nextInt(9)+48;
//将index数组数据类型是int index[arr.length-1]获取到的也是int类型也可以作为下标
//而index里的值是随机数所以 index[arr.length-1]获取到的是0-5不确定的数
arr[index[arr.length-1]]=(char) num1;
//声明一个变量
String verification="";
for (int i = 0; i < arr.length; i++) {
//将arr每个元素存储到verification当中
verification +=arr[i];
}
System.out.println(verification);
}
}