Java大一课程加解密作业:输入字符串仅最后一个字符被加密问题求助
代码存在的问题
- 第一个问题:循环内结果被重复覆盖
你当前在for循环中对result变量的赋值逻辑是直接覆盖旧值,每次循环都会把前一次处理得到的字符结果清空,仅保留本次循环的字符处理结果,所以最终输出只剩最后一个字符的加密结果。 - 第二个问题:未完成作业要求的字符数组反转操作
作业注释明确要求需要先反转字符数组再执行偏移加密,你的代码目前完全没有实现反转逻辑,不符合作业要求。
修正代码示例
public class SimpleCipher { // 数组反转方法,符合作业要求单独封装的规则 private void reverseCharArray(char[] arr) { int left = 0; int right = arr.length - 1; while (left < right) { char temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } } /* * 加密方法:先反转字符数组,再逐位偏移2位后转为字符串返回 */ public String encode(String text) { // 1. 将字符串转为字符数组 char[] chars = text.toCharArray(); // 2. 调用反转方法处理字符数组 reverseCharArray(chars); // 3. 遍历数组逐位偏移2位 for (int i = 0; i < chars.length; i++) { // 如果需要处理字母循环(比如z偏移2位到b)可以启用以下判断逻辑 // if (chars[i] >= 'a' && chars[i] <= 'z') { // chars[i] = (char) ((chars[i] - 'a' + 2) % 26 + 'a'); // } else if (chars[i] >= 'A' && chars[i] <= 'Z') { // chars[i] = (char) ((chars[i] - 'A' + 2) % 26 + 'A'); // } else { // 非字母直接偏移,可按作业实际要求调整 chars[i] += 2; // } } // 4. 字符数组直接转为字符串返回 return new String(chars); } // 测试用main方法 public static void main(String[] args) { SimpleCipher cipher = new SimpleCipher(); // 测试输入cookie System.out.println(cipher.encode("cookie")); } }
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

