解题思路

1、功能需要定义方法实现,方法的返回值是什么?需要参数列表吗?

2、先将可选择的字符都放到一个StringBuilder对象中。

3、怎样随机获取其中的四个字符呢?如果能随机获取一个,再获取四次,就可以了。那么怎样随机获取一个呢?

字符串中的字符是有索引的,如果可以随机获取到一个索引,就相当于随机获取到了该索引上的字符。

具体步骤

1、定义方法,返回值是String,参数列表为空。

2、定义StringBuilder对象,将可选择的字符都放到StringBuilder对象中。

2.1、定义循环从a-z,使用StringBuilder的append方法依次添加所有小写字母

2.2、定义循环从A-Z,使用StringBuilder的append方法依次添加所有大写字母

2.3、定义循环从0-9,使用StringBuilder的append方法依次添加所有数字字符

3、创建Random对象。定义一个空字符串用于保存验证码。

4、定义一个执行4次的循环,用于获取4个字符。

4.1、在循环中,使用Random的nextInt方法,随机获取一个从索引0(包含)到字符串的长度(不包含)的索引。

4.2、使用StringBuilder的charAt方法,获取该索引上的字符,将其拼接到验证码字符串中。

5、返回结果,并在主方法中调用方法查看结果。

代码实现

import java.util.Random;

/*
验证码:    常用API random,string,stringBuilder   
 */
public class YanZhengMa {
    public static void main(String[] args) {
        //创建字符串对象,用来接受方法的返回值
        String code = getRandomCode();//()返回值
        //打印输出
        System.out.println("验证码:");
        System.out.println(code);
    }

    //创建getRandomCode方法用于产生随机验证码
    private static String getRandomCode() {
        //创建字符序列对象
        StringBuilder stringBuilder = new StringBuilder();
        //循环遍历
        for (char ch = \'a\'; ch <= \'z\'; ch++) {
            //产生小写字母字符
            stringBuilder.append(ch);
        }
        for (char ch = \'A\'; ch <= \'Z\'; ch++) {
            //产生大写字母字符
            stringBuilder.append(ch);
        }
        for (char ch = \'0\'; ch <= \'9\'; ch++) {
            //产生数字字符
            stringBuilder.append(ch);
        }
        //创建随机数对象
        Random random = new Random();
        //定义字符串对象,定义一个空字符串用于保存验证码
        String code = "";
        //循环遍历
        for (int i = 0; i < 4; i++) {
            //使用Random的nextInt方法,随机获取一个从索引0(包含)到字符串的长度(不包含)的索引。
            int index = random.nextInt(stringBuilder.length());
            //获取该索引上的字符,将其拼接到验证码字符串中。
            code = code + stringBuilder.charAt(index);
        }
        //返回值
        return code;
    }
}

键盘输入验证码比对 :

键盘输入Scanner   

与字符串进行比较,忽略大小写

equalsIgnoreCase   

  • 如果两个字符串的长度相同,并且两个字符串中的相应字符等于忽略大小写,则两个字符串被认为是相等的。

 

 

 判断需要一直到输入正确为止,所以需要使用循环。使用while循环

import java.util.Random;
import java.util.Scanner;

/*
验证码:    常用API random,string,stringBuilder
 */
public class YanZhengMa {
    public static void main(String[] args) {
        //创建键盘输入对象
        Scanner scanner = new Scanner(System.in);
        //循环判断
        while (true) {
            //创建字符串对象,用来接受方法的返回值
            String code = getRandomCode();//()返回值
            //打印输出
            System.out.println("验证码:" + code);
            System.out.println("请输入验证码");
            //记录输入字符,字符串类型用nextLine
            String hhhh = scanner.nextLine();
            //判断equalsIgnoreCase方法,忽略大小写
            if (code.equalsIgnoreCase(hhhh)) {
                System.out.println("输入正确");
                break;
            } else {
                System.out.println("输入错误,请重新输入");
            }
        }

    }

    //创建getRandomCode方法用于产生随机验证码
    private static String getRandomCode() {
        //创建字符序列对象
        StringBuilder stringBuilder = new StringBuilder();
        //循环遍历
        for (char ch = \'a\'; ch <= \'z\'; ch++) {
            //产生小写字母字符
            stringBuilder.append(ch);
        }
        for (char ch = \'A\'; ch <= \'Z\'; ch++) {
            //产生大写字母字符
            stringBuilder.append(ch);
        }
        for (char ch = \'0\'; ch <= \'9\'; ch++) {
            //产生数字字符
            stringBuilder.append(ch);
        }
        //创建随机数对象
        Random random = new Random();
        //定义字符串对象,定义一个空字符串用于保存验证码
        String code = "";
        //循环遍历
        for (int i = 0; i < 4; i++) {
            //使用Random的nextInt方法,随机获取一个从索引0(包含)到字符串的长度(不包含)的索引。
            int index = random.nextInt(stringBuilder.length());
            //获取该索引上的字符,将其拼接到验证码字符串中。
            code = code + stringBuilder.charAt(index);
        }
        //返回值
        return code;
    }
}

 

版权声明:本文为PackageArray原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/PackageArray/p/14324596.html