JavaScript暴力匹配单词代码while循环条件为假不退出死循环问题求解
问题原因
- 字符集定义错误:你声明的
alphabets字符串遗漏了字母p,实际内容为abcdefghijklmnoqrstuvwxyz,o和q之间缺少p,若目标单词包含p会永远无法匹配到对应字符,无法退出while循环,这也是你截图中没有出现字符p、也没有匹配成功日志的直接原因。 - 无索引边界校验:你的代码没有对自增变量
j做边界判断,当j超过alphabets的总长度后,alphabets[j]会返回undefined,此时text的末尾字符会固定为undefined,永远不可能和目标字符相等,j会持续无限自增,最终进入死循环。
修复方案
- 补全字符集,将
alphabets的定义修改为包含所有小写字母的版本:
alphabets = "abcdefghijklmnopqrstuvwxyz";
- 给while循环增加索引边界校验,避免索引溢出引发死循环:
// 增加j < alphabets.length的判断,防止索引溢出 while(text.charAt(text.length - 1)!=word[i] && j < alphabets.length){ j++; text = text.substring(0, text.length - 1); text += alphabets[j]; } // 可选:增加未匹配到的异常提示 if(j >= alphabets.length){ console.log(`未找到匹配字符${word[i]},请检查字符集是否包含该字符`); break; }
内容的提问来源于stack exchange,提问作者Pranav Desai
相关产品推荐
相关产品推荐

