专题课:综合案例6

news/2024/11/17 11:55:45/文章来源:https://www.cnblogs.com/zhishi6/p/18550393

随机产生验证码


首先,我们得想清楚,如何从数组里面随机取出一个元素,只要我们能从数组里取出1个元素,接下来再随机取出4个,不就组成一个验证码了么

.

1.取出一个随机元素:

说到随机,我们肯定会想到随机数,但我们该如何让随机数与我们的数组元素产生联系呢?

答:数组不管是什么类型,它肯定会有由数字组成的索引,那我们随机一个5范围内的随机数,我们会发现随机数产生的数字,与索引对应上了。

既然对应上了,就把这个随机数当作索引,去数组里面获取元素


.

上图的代码还需要优化,因为我们把随机数范围写死了,而正是因为数组长度是5,我们才写的5,那我们直接在随机数里写arr.length不就行了,这样无论什么数组都可以适用

取出元素思路:根据数组的长度,产生随机数,拿这个随机数,当作索引去获取数组中的元素

.

2.取出5个元素:

既然已经知道该如何取出1个元素,那我们只需要循环5次取出1个元素,不就取出5个元素了么

写到这,我们的代码并没有结束,在现实生活中,产生了验证码,是不是应该让用户对着验证码输入,然后比较用户输入的和系统产生的是否一致,因此,我们还需要写一个校验代码

键盘录入,然后if进行比较

写到比较时,我们发现写不下去了,用户输入的验证码该拿谁进行比较?我们前面只是将元素取出然后进行打印,压根没有进行存储,代码中根本没有形成一份数据(arr[i]只是一个随机元素,并且会在每一轮循环结束后弹栈,根本不能比较)

.

因此,现在的代码中看不中用,那怎么才能使用呢?

.

答:我们应该把随机取出来的字符,拼接成一个字符串,把他们拼接成一个整体就可以使用了

+=,就是左右两边数据进行运算然后把值赋给左边。而之前我们也说过,在加法的操作当中,如果遇到了字符串,它就会变成拼接。

定义一个空的字符串,然后将每个产生的随机数进行拼接,成为一个整体。这样就清楚要拿什么和用户输入的进行比较了

if后面的代码就暂时不写了,因为String的比较用的不是==,而是equal。

.

在完成了上述所有流程后,还需要优化一个地方,便是最开始的数组,一大包数字和字母挤在一个数组里,实在不美观而且臃肿。

3.优化数组:

1.数组里面不止有数字,还有字母,所以我们应该定义char类型数据,并且使用动态初始化

char[] arr=new char[26+26+10];

26个小写字母,26个大写字母,还有0~9的数字。

.

2.然后,我们要想办法获取这些字符


上图中,使用了for循环,但是括号里的却全是字符,并且控制台还真可以打印。

之前我们说过,每个字符都有一个数值表示形式,这里的'a'便是97,由此,程序内部根据数值进行判断,97+1=98,98就是b的数值表示形式,以此类推,所有字母就都被遍历打印了。



.

3.接下来,我们要把这些字符存入数组中

c代表a-z,然后我们把每一个c装入数组,但是该存到哪个索引位置,又是一个问题。

仔细想想,我们想往里存的顺序就是第一次是存在0号,然后1号,然后2号.....

所以,目前我们缺少的就是一个变量,没有这个变量怎么办?那我们就自己定义一个!

最开始index是0,存入0号索引,然后加1,存入1号....以此类推,26个字母全部存满

后面的大写字母和数字都可以用index,因为index是定义在循环外面,不会消失,每一次index++都会固定index的值,所以轮到A时,index就是27,A就存入27,以此类推......

细节:对于打印语句,如果打印的时字符类型数组,程序内部会自动帮你遍历数组

4.总结

第一步:取1个

第二步:取5个

第三步、第四步、第五步:键盘录入、空字符串、对比

第六步、第七步、第八步:优化数组动态初始化、for循环获取、定义变量元素存入

总览



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/835270.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

# 学期2024-2025-1 学号(20241405) 《计算机基础与程序设计》第8周学习总结

作业信息 |这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP| |这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08| |这个作业的目标|功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、…

python岭迹图绘制函数

一.岭迹图是什么?岭迹图(Ridge Trace Plot)是一种可视化工具,用于展示岭回归中正则化参数($\alpha$)对回归系数的影响。它能帮助我们理解特征的稳定性和正则化在控制模型复杂度中的作用。 二.什么时候需要看岭迹图?存在共线性特征时当特征间高度相关,普通最小二乘法(O…

探索训练人工智能模型的词汇大小与模型的维度

前一篇:《人工智能同样也会读死书----“过拟合”》 序言:你看,人工智能领域的专家都在做什么?他们其实只是在不断试错,因为并没有一种“万能药”——一种万能的算法可以一次性设计出任何人工智能大模型来实现客户的需求。所有的模型在设计和训练过程中都是——验证结构——…

北美竞赛-加拿大计算机竞赛CCC-收获滑铁卢

给定一个 RCRC 的方格矩阵。 矩阵左上角方格坐标为 (0,0)(0,0),右下角方格坐标为 (R−1,C−1)(R−1,C−1)。 每个方格中要么有南瓜,要么有干草。 南瓜分为大、中、小三种。 初始时,一个农民位于方格 (A,B)(A,B)。 他可以朝上下左右四个方向自由移动,但是他不能走出矩阵,也…

BUU CODE REVIEW 1 1

BUU CODE REVIEW 1 1 打开实例发现php代码,代码审计一波看到unserialize(),初步判断这题存在php反序列化 分析代码:需要GET传参传入pleaseget=1 需要POST传参传入pleasepost=2 需要POST传入md51和md52,使得md51的md5加密后的MD5值弱相等,参数值不相等 需要POST传入obj,用来…

25 个值得关注的检索增强生成 (RAG) 模型和框架

大型语言模型 (LLM) 如 GPT-4 彻底革新了自然语言处理 (NLP) 领域,在生成类人文本、回答问题和执行各种语言相关任务方面展现出卓越的能力。然而,这些模型也存在一些固有的局限性:知识截止:LLM 的训练数据通常截止于特定时间点,使其无法获取训练后发生的事件或信息。 静态…

IDEA不使用lombok,如何快速生成get和set方法

前言 大家好,我是小徐啊。我们在开发Java应用的时候,对于实体类,一般是entity或者pojo类,需要设置好属性的get和set方法。这是比较普通的操作。当然,现在已经有lombok这个插件和依赖来帮助我们不用写get和set方法了。不过,对于一些老系统,我还是习惯于手写get和set方法。…

爱玛单车队-冲刺日志第一天

会议记录:今天是整个冲刺计划最关键的一天,我们需要制定好整个计划并且安排好分工任务,为每个分工任务制定好负责人,来督促每个环节的任务。 本次冲刺确定了以下分工:成员姓名 职责曾庆徽 组长,分配协调组织林传昊 代码审查翁林靖 AI接回查找与测试毛震 软件测试(性能、…

达梦数据库数据类型的变更无效错误,如此解决妙啊

前言 大家好,我是小徐啊。之前在做国产化改造,用到了达梦数据库。其中的一项工作就是将旧数据库里面的数据和结构迁移到达梦数据库。达梦提供了迁移的的工具,大部分时间是挺好用的。 但是这里也有问题,比如我原来的数据库是postgresql,将它迁移到达梦数据库之后,在运行程…

域名选购操作指南

一、前言 在这个互联网时代, 域名已成为网站的数字身份证和品牌象征。它不仅是访问网站的便捷入口, 更一、前言 在这个互联网时代, 域名已成为网站的数字身份证和品牌象征。它不仅是访问网站的便捷入口, 更是树立网络品牌形象的重要资产。2024 年双十一期间, 我在腾讯云平台购置…

2024-2025-1 学号20241315《计算机基础与程序设计》第八周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 <作业要求的链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08这个作业目标 功能设计与面向对象设计 面向对象设计过程 面向对象语言三要素 汇编、编译、解释、执行作业正文…