我是一个初学者程序员,我知道这可能是一个简单的问题,我有困难理解逻辑。我正在开发一个用ROT13密码破译凯撒密码的程序。这是FreeCodeCamp的任务之一。但在我的技能水平上,他们的解决方案对我来说很难理解,所以我想用我自己的方式。我设法走了很远,但我偶然发现了一个问题。我正在处理数组,我将返回带有解密消息的数组。在这种情况下,输出应该是F,R,E,E,C,O,D,E,C,A,M,P,但我得到的却是未定义的,"R",未定义,"O",未定义的,"P“。我知道我没有定义,因为在未定义的情况下,j+13大于26,而字母表或数组中只有26个字母。我不知道怎么做,所以在j+13 > 26的情况下,字母表会重复。任何提示都会很有帮助
let str = "SERR PBQR PNZC";
let strArr = str.split("");
let alphabet = [];
let tempArr = [];
for (i = 65; i <= 90; i++){
alphabet.push(String.fromCharCode(i))
}
for (i = 0; i < strArr.length; i++) {
for (j = 0; j < alphabet.length; j++) {
if (strArr[i] === alphabet[j]) {
tempArr.push(alphabet[j+13]);
}
}
}
console.log(tempArr);发布于 2018-02-21 01:43:52
alphabet[j+13]通常是未定义的,因为每当j >= 13出现时,j+13都会超过字母表的末尾。您可以使用remainder operator %再次有效地绕回数组的开头,而不是超过数组的结尾。只需将其更改为alphabet[(j+13)%26]
let str = "SERR PBQR PNZC";
let strArr = str.split("");
let alphabet = [];
let tempArr = [];
for (i = 65; i <= 90; i++){
alphabet.push(String.fromCharCode(i))
}
for (i = 0; i < strArr.length; i++) {
for (j = 0; j < alphabet.length; j++) {
if (strArr[i] === alphabet[j]) {
tempArr.push(alphabet[(j+13)%26]);
}
}
}
console.log(tempArr);
https://stackoverflow.com/questions/48891171
复制相似问题