求助:修复JavaScript实现Caesar Cipher转换的代码并排查错误
凯撒密码(ROT13)代码错误分析与修正
代码中的核心错误:
- 循环变量重名:内外层循环都使用了变量
i,内层循环会直接覆盖外层的i值,导致外层循环逻辑完全混乱,无法正确遍历字符串的每个字符。 - 字符串不可变+赋值逻辑错误:JavaScript中字符串是不可变类型,
str.charAt(i)仅能读取字符,无法直接修改原字符串;同时代码里误用了比较运算符==,而非赋值运算符=,就算字符串可变也无法完成替换。 - 提前返回打断流程:内层循环的
else分支直接return str.charAt(i),会导致第一个不匹配的字符(比如空格)就终止函数,后续字符完全无法处理。 - 循环边界错误:外层循环条件
i < str.length-1会漏掉字符串的最后一个字符,正确边界应为i < str.length。
修正后的代码:
let abcToCesar = [ {abc: "A", cesar: "N"}, {abc: "B", cesar: "O"}, {abc: "C", cesar: "P"}, {abc: "D", cesar: "Q"}, {abc: "E", cesar: "R"}, {abc: "F", cesar: "S"}, {abc: "G", cesar: "T"}, {abc: "H", cesar: "U"}, {abc: "I", cesar: "V"}, {abc: "J", cesar: "W"}, {abc: "K", cesar: "X"}, {abc: "L", cesar: "Y"}, {abc: "M", cesar: "Z"}, {abc: "N", cesar: "A"}, {abc: "O", cesar: "B"}, {abc: "P", cesar: "C"}, {abc: "Q", cesar: "D"}, {abc: "R", cesar: "E"}, {abc: "S", cesar: "F"}, {abc: "T", cesar: "G"}, {abc: "U", cesar: "H"}, {abc: "V", cesar: "I"}, {abc: "W", cesar: "J"}, {abc: "X", cesar: "K"}, {abc: "Y", cesar: "L"}, {abc: "Z", cesar: "M"}, ] function toCaesar(str) { let result = ''; // 遍历输入字符串的每个字符 for(let i = 0; i < str.length; i++){ const currentChar = str.charAt(i); let found = false; // 遍历映射数组找对应替换字符 for(let j = 0; j < abcToCesar.length; j++){ if(currentChar === abcToCesar[j].abc){ result += abcToCesar[j].cesar; found = true; break; // 找到匹配就跳出内层循环 } } // 未找到匹配(如空格)则保留原字符 if(!found){ result += currentChar; } } return result; } console.log(toCaesar("SERR PBQR PNZC")); // 输出: FREE CODE CAMP
内容的提问来源于stack exchange,提问作者Hans Udo Wolfrahm
相关产品推荐
相关产品推荐

