You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript凯撒加密代码触发无限循环导致系统过载无响应问题求助

凯撒加密代码问题修复

已定位的错误点

  • 直接导致卡死的死循环诱因:数组赋值逻辑错误
    原代码中tTexteAvant = new Array(texteBase.split(''));写法错误,split('')执行后已经返回拆分好的一维字符数组,外层套new Array()会生成二维数组,后续循环传入加密函数的参数是整个字符数组而非单个字符,永远无法匹配字母表触发无限循环。
  • 加密函数的死循环隐患:
    原crypter函数中匹配字符的while循环没有边界判断,只要传入的内容不在字母表数组中(比如小写字母、数字、特殊符号),i会无限自增导致程序过载卡死。
  • 其他功能错误:
    1. 加密函数最终返回的是索引值而非对应的加密字符,不符合功能要求
    2. 移位边界判断逻辑错误,未覆盖i + nC刚好等于字母表长度的场景
    3. 未兼容用户输入的小写字母,会直接匹配失败触发死循环

修复后完整代码

function crypter(t, l, nC) {
    // 统一转大写匹配字母表
    l = l.toUpperCase();
    // 用indexOf替代手动循环避免死循环
    let i = t.indexOf(l);
    // 不在字母表的字符直接返回原字符避免报错
    if (i === -1) return l;
    // 用模运算简化移位计算,自动处理边界
    const targetIndex = (i + nC) % t.length;
    return t[targetIndex];
}

//Global variables
var tAlphaB = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
    'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' '
];
var niveauCryptage = 0;
var texteBase = '';
var tTexteAvant = new Array();
var tTexteApres = [];
var txt = 'Le résultat du cryptage est : \n\n';

//Main program
//Ask the user to specify the number by which the letters of the message have to be shifted in the alphabet
//This number has to be a number between 1 and 10 (1 and 10 included)
do {
    niveauCryptage = parseFloat(prompt("Saisissez un nombre entre 1 et 10 pour selectionner le niveau de cryptage"));
} while (isNaN(niveauCryptage) || niveauCryptage > 10 || niveauCryptage < 1)


//Ask the user to enter a message on the condition that it is a chain of characters
do {
    texteBase = prompt("Quel texte voudrez-vous crypter?");
} while (!isNaN(texteBase))

// 修正数组赋值,直接取split返回的一维数组
tTexteAvant = texteBase.split('');

//Encrypt each letter of the table, tTexteAvant, into a new table, tTexteApres          
var j = 0;
while (j < tTexteAvant.length) {
    tTexteApres.push(crypter(tAlphaB, tTexteAvant[j], niveauCryptage));
    j++;
}

// 输出加密结果
alert(txt + tTexteApres.join(''));
console.log(txt + tTexteApres.join(''));

内容的提问来源于stack exchange,提问作者LimeeFox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:45:04