如何在不使用高级语句的情况下让密码第6、7位仅生成大小写字母?
解决密码第6、7位仅为大小写字母的问题
问题分析
你当前代码中第6、7位的生成逻辑generator.nextInt(58)+65会生成ASCII码65-122的字符,其中包含了[、\、]、^、_、 `这些非字母符号,所以需要调整逻辑,只生成A-Z(65-90)和a-z(97-122)的字符,且不使用if语句或高级命令。
方案1:用字符串存储所有大小写字母(最适合初学者)
把所有大小写字母存入一个字符串,直接随机获取字符串的索引位置,这样就能保证取到的一定是字母,完全不需要条件判断:
import java.util.Random; public class RandomPasswordGenerator { public static void main(String[] args) { Random generator = new Random(); // 存储所有大小写字母的字符串 String allLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; int First = generator.nextInt(26)+97; int Second = generator.nextInt(26)+97; int Third = generator.nextInt(10); int Fourth = generator.nextInt(26)+65; int Fifth = generator.nextInt(26)+65; // 从字符串中随机取一个字母(索引0-51对应所有大小写字母) char Sixth = allLetters.charAt(generator.nextInt(52)); char Seventh = allLetters.charAt(generator.nextInt(52)); System.out.print((char) First); System.out.print((char) Second); System.out.print((char) Third); System.out.print((char) Fourth); System.out.print((char) Fifth); System.out.print(Sixth); System.out.println(Seventh); } }
方案2:基于ASCII码的数学计算(不用条件判断)
通过生成0-51的随机数,利用数学运算区分大小写范围:
- 0-25:对应大写字母,直接加65(A的ASCII码)
- 26-51:减去26后得到0-25,再加97(a的ASCII码)
这里使用三元运算符(比if更简洁,符合初学者需求):
import java.util.Random; public class RandomPasswordGenerator { public static void main(String[] args) { Random generator = new Random(); int First = generator.nextInt(26)+97; int Second = generator.nextInt(26)+97; int Third = generator.nextInt(10); int Fourth = generator.nextInt(26)+65; int Fifth = generator.nextInt(26)+65; int sixthNum = generator.nextInt(52); int Sixth = sixthNum < 26 ? sixthNum + 65 : sixthNum - 26 + 97; int seventhNum = generator.nextInt(52); int Seventh = seventhNum < 26 ? seventhNum + 65 : seventhNum - 26 + 97; System.out.print((char) First); System.out.print((char) Second); System.out.print((char) Third); System.out.print((char) Fourth); System.out.print((char) Fifth); System.out.print((char) Sixth); System.out.println((char) Seventh); } }
说明
两种方案都没有使用if语句,方案1更直观易懂,适合刚接触编程的新手;方案2能帮助你理解ASCII码的字符范围和基础数学运算的应用。
内容的提问来源于stack exchange,提问作者Arson1st
相关产品推荐
相关产品推荐

