Java密码生成程序:如何将输出行首字符与中间字符转数字追加到末尾?
解决方案
要实现这个需求,你需要先把当前分散打印的字符拼接成完整的初始密码字符串,再提取首字符和中间字符转换为数字求和,最后将结果追加到密码末尾。具体步骤和修改后的代码如下:
关键步骤说明
- 拼接初始密码:不再直接逐个打印字符,而是用
StringBuilder把所有字符拼接成完整的初始密码字符串,方便后续操作。 - 字符转数字规则:
- 小写字母按
a=1, b=2...z=26转换 - 数字字符直接转为对应数值(如
'3'转3)
- 小写字母按
- 提取首字符与中间字符:首字符取字符串索引0的位置;中间字符取字符串长度的一半位置(如长度为7时取索引3,长度为6时取索引3)
- 求和并追加:计算两个字符对应数字的和,将结果追加到初始密码末尾,得到最终密码。
修改后的完整代码
import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("This is a password generator that will take some information and create a password."); System.out.println(""); System.out.println("In the following prompts please enter your information in all lowercase. Thanks!"); System.out.println(""); System.out.println("enter first name here: "); String fname = input.next(); System.out.println("enter middle name here: "); String mname = input.next(); System.out.println("Enter last name here: "); String lname = input.next(); System.out.println("Enter birthday (MMDDYYYY) here: "); String age = input.next(); char resultfn = fname.charAt(1); char resultage0 = age.charAt(2); char resultage1 = age.charAt(3); char resultmn = mname.charAt(1); fname = fname.substring(fname.length()-2); lname = lname.substring(lname.length()-3); char reversedfn = fname.charAt(0); // 1. 拼接初始密码 StringBuilder passwordBuilder = new StringBuilder(); passwordBuilder.append(resultfn); passwordBuilder.append(reversedfn); passwordBuilder.append(resultmn); passwordBuilder.append(resultage0); passwordBuilder.append(resultage1); passwordBuilder.append(lname); String initialPassword = passwordBuilder.toString(); // 2. 转换首字符为数字 int firstNum = charToNumber(initialPassword.charAt(0)); // 3. 转换中间字符为数字 int middleIndex = initialPassword.length() / 2; int middleNum = charToNumber(initialPassword.charAt(middleIndex)); // 4. 计算求和并生成最终密码 int sum = firstNum + middleNum; String finalPassword = initialPassword + sum; // 打印最终密码 System.out.println(finalPassword); } // 辅助方法:将字符转换为对应数字 private static int charToNumber(char c) { if (Character.isLowerCase(c)) { // 小写字母a-z对应1-26 return c - 'a' + 1; } else if (Character.isDigit(c)) { // 数字字符转为对应数值 return c - '0'; } // 非预期字符返回0(可根据需求调整) return 0; } }
代码说明
StringBuilder用于高效拼接字符,避免多次字符串拼接的性能损耗。charToNumber方法统一处理字母和数字的转换逻辑,代码更清晰。- 中间字符的索引计算采用
initialPassword.length() / 2,无论密码长度是奇数还是偶数,都能取到中间区域的字符,你也可以根据需求调整为(initialPassword.length()-1)/2来取更靠左的中间位置。
内容的提问来源于stack exchange,提问作者Aiden McCoy
相关产品推荐
相关产品推荐

