Java实战:3次登录与随机验证码生成
题目一

一、解题思路拆解
1. 需求拆解
- 固定账号:正确登录名
shengya,密码123456。 - 交互方式:控制台接收用户输入。
- 次数限制:最多允许 3 次登录尝试,成功则终止程序,失败则提示剩余次数。
- 成功反馈:登录成功后输出 “欢迎进入系统!”。
2. 步骤拆解
- 界面与输入:
- 打印登录提示,引导用户输入登录名和密码。
- 使用
Scanner类读取键盘输入的字符串。
- 认证方法设计:
- 定义一个
checkLogin(String username, String password)方法,返回boolean类型。 - 在方法内部,使用
String.equals()比较输入内容与正确账号密码,返回验证结果。
- 定义一个
- 循环控制逻辑:
- 使用
for循环(或while循环)控制最多 3 次尝试。 - 每次循环调用登录方法:
- 若返回
true:输出欢迎信息,跳出循环,结束程序。 - 若返回
false:计算剩余尝试次数并提示,继续循环。
- 若返回
- 若 3 次均失败,输出锁定提示并结束程序。
- 使用
- 边界处理:
- 防范空输入:在比较前判断输入是否为
null,避免空指针异常。 - 次数统计:确保循环严格执行最多 3 次,不会无限尝试。
- 防范空输入:在比较前判断输入是否为
二、完整代码示例
package com.sy.demo;
import java.util.Scanner;
public class LoginDemo {
public static void main(String[] args) {
System.out.println("欢迎进入胜雅教育学生管理系统");
// 开发一个循环登录三次的系统
for (int i = 0; i < 3; i++) {
// 1.让用户输入登录名 和 密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入登录名: ");
String username = sc.next(); // 用户手动录入的用户名
System.out.println("请输入密码: ");
String password = sc.next(); // 用户手动录入的密码
// 将用户输入的登录名 和 密码 做校验 判断是否正确 true/false
boolean flag = login(username, password); //true/false
if (flag){
System.out.println("恭喜您 登录成功...");
break;
}else {
System.out.println("登录名或者密码错误 请重新输入...");
}
}
}
// 判断登录是否正确
public static boolean login(String username, String password){
// 定义系统的登录名和密码
String loginUsername = "liuyan";
String loginPassword = "123456";
if (loginUsername.equals(username) && loginPassword.equals(password)){
// 如果校验正确 登陆成功
return true;
}else {
// 如果校验失败 登录失败
return false;
}
}
}
三、核心技术点总结
| 技术点 | 作用 | 关键代码示例 |
|---|---|---|
Scanner 输入 |
读取用户输入的登录名和密码 | Scanner sc = new Scanner(System.in); |
String.equals() |
字符串内容比较(核心认证逻辑) | "shengya".equals(username) |
for/while 循环 |
控制最多 3 次登录尝试 | for (int i=0; i<3; i++) { ... } |
| 方法封装 | 分离登录验证逻辑,提高代码复用性 | public static boolean checkLogin(...) |
| 流程控制 | 根据认证结果决定程序走向 | if (checkLogin(...)) { break; } |
四、解题思路总结
- 先搭框架:确定程序结构(输入 → 验证 → 反馈 → 循环控制)。
- 再写核心:封装登录验证方法,专注实现账号密码的正确性判断。
- 后控流程:用循环管理尝试次数,根据验证结果分支处理(成功 / 失败 / 次数耗尽)。
- 最后优化:添加友好提示和异常处理,提升用户体验和代码健壮性。
题目二

一、解题思路拆解
1. 需求拆解
- 字符范围:验证码每位字符可从 ** 数字(0-9)、大写字母(A-Z)、小写字母(a-z)** 中随机选取。
- 功能要求:设计一个可复用的方法,接收 “验证码位数” 作为参数,返回对应长度的随机验证码字符串。
- 输出形式:最终在控制台打印生成的验证码字符串。
2. 步骤拆解
-
方法设计
- 定义一个方法
generateCaptcha(int length),参数length代表验证码位数,返回值为String类型。 - 该方法封装了验证码生成的核心逻辑,方便在主方法或其他地方重复调用。
- 定义一个方法
-
变量定义
- 定义字符源字符串:
String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";,包含所有可选字符。 - 定义结果字符串:
String code = "";,用于拼接最终生成的验证码。
- 定义字符源字符串:
-
循环生成字符
- 使用
for循环,循环次数等于验证码位数length。 - 每次循环中:
- 生成随机索引:通过
Random.nextInt(chars.length())获取一个0到字符源长度 - 1 的随机数。 - 提取字符:调用
chars.charAt(randomIndex)从字符源中取出对应位置的字符。 - 拼接结果:将提取到的字符拼接到
code字符串中。
- 生成随机索引:通过
- 使用
-
返回结果
- 循环结束后,将拼接完成的
code字符串返回。
- 循环结束后,将拼接完成的
-
主方法调用
- 在
main方法中创建Random对象,调用generateCaptcha()方法(如传入6生成 6 位验证码),并打印结果。
- 在
二、完整代码示例
package com.sy.demo;
import java.util.Random;
public class CodeDemo {
public static void main(String[] args) {
// 方法调用 返回的验证码
System.out.println(createCode(4));
System.out.println(createCode(6));
}
// 定义方法 设计一个生成验证码方法
public static String createCode(int n){
// 定义两个变量
String code = ""; //记录生成的验证码
String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//创建随机数对象
Random random = new Random();
// 随机生成n位的字符串
for (int i = 0; i < n; i++) {
// 生成的随机数必须是data变量的范围之内
int index = random.nextInt(data.length()); // 随机得到的索引
code += data.charAt(index); // code = code + b = b
}
return code;
}
}
三、核心技术点总结
| 技术点 | 作用 | 关键代码示例 |
|---|---|---|
String.charAt(int index) |
从字符串中提取指定索引位置的字符 | chars.charAt(2) → '2' |
String 拼接 |
将多个字符连接成最终验证码 | code += randomChar; |
Random.nextInt(int bound) |
生成 [0, bound) 范围内的随机整数 |
new Random().nextInt(chars.length()) |
| 方法封装 | 复用验证码生成逻辑,提高代码可维护性 | public static String generateCaptcha(int length) |
四、解题思路总结
- 明确范围:先确定所有可用字符集合,将其存入一个字符串作为 “字符池”。
- 随机抽取:通过随机数生成索引,从 “字符池” 中随机挑选字符,保证验证码的随机性。
- 循环拼接:利用循环控制验证码长度,将每次抽取的字符拼接成完整验证码。
- 封装复用:将生成逻辑封装为方法,实现 “一次编写,多次调用”,符合模块化开发思想。
一、核心知识点总览
| 知识模块 | 核心内容 | 对应题目 |
|---|---|---|
| Scanner 控制台输入 | 获取用户键盘输入(字符串 / 整数) | 两道题均涉及(登录输入、验证码长度输入) |
| String 类核心操作 | 内容比较 (equals)、字符提取 (charAt)、字符串拼接 |
登录验证、验证码生成 |
| Random 随机数 | 生成随机索引 (nextInt),实现随机性 |
验证码生成 |
| 流程控制语句 | for 循环(次数控制)、if-else 分支(结果判断) |
登录三次机会、验证码循环生成 |
| 方法封装与调用 | 定义静态方法、方法参数 / 返回值、解耦设计 | 登录验证方法、验证码生成方法 |
| 异常与边界处理 | 字符串常量比较(防空指针)、循环次数控制 | 登录验证、验证码生成 |
二、综合案例融合(登录 + 验证码)
当两道题结合时,还考察了以下流程编排知识点:
- 状态标记:使用
boolean isLoggedIn = false标记登录状态。- 逻辑:登录成功后置为
true,仅当状态为true时才执行验证码生成逻辑,实现 “登录成功后才生成验证码” 的业务规则。
- 逻辑:登录成功后置为
- 代码执行顺序:
- 主流程:输入 -> 登录验证(循环 3 次)-> 成功 -> 调用验证码方法 -> 输出结果。
- 强调:方法调用的时机(只有登录成功后才调用
generateCaptcha)。
三、核心总结与易错点
1. 必背核心 API
| 方法名 | 作用 | 场景 |
|---|---|---|
scanner.nextLine() |
获取用户输入的字符串 | 登录、验证码输入 |
str.equals(str2) |
比较字符串内容 | 登录验证(最易错) |
str.charAt(index) |
获取指定索引的字符 | 验证码生成 |
random.nextInt(n) |
生成 [0, n) 的随机整数 | 验证码随机索引 |
更多推荐




所有评论(0)