while循环计数器问题求助:密码暴力破解模拟代码调试
问题分析与解决
错误原因
- 随机数仅生成一次:你把
randomNumber定义在while循环外部,整个程序运行期间只会生成一个固定的随机数,无法模拟每次破解的不同场景。 - 强制终止循环:每个判断分支里都加了
break,不管是猜对、猜错被检测还是猜错未被检测,循环只执行一轮就直接退出,correctGuesses根本没有机会逐次累加。 - 多余的无效判断:循环条件已经是
correctGuesses < 4,进入循环时这个值必然小于4,内部的correctGuesses === 4判断永远不会触发。
修正后的代码
var correctGuesses = 0; while (correctGuesses < 4) { // 每次循环重新生成1-3的随机数,模拟单次破解的随机结果 var randomNumber = Math.ceil(Math.random() * 3); if (randomNumber === 1) { correctGuesses++; console.log(`Found ${correctGuesses} characters`); } else if (randomNumber === 2) { correctGuesses = 0; console.log('Starting over'); } // randomNumber为3时,correctGuesses保持不变,无需额外操作 } // 循环退出时correctGuesses必然等于4,打印成功信息 console.log('Terminal hacked!');
修改说明
- 将
randomNumber的生成逻辑移到循环内部,确保每次破解都会生成新的随机数,符合任务要求的随机场景。 - 移除所有不必要的
break,让循环可以持续执行,直到correctGuesses累加到4。 - 把成功提示放到循环结束后打印,因为循环退出的条件就是
correctGuesses >=4,此时必然破解成功。 - 用模板字符串简化了打印语句,同时修正了原代码中字符串拼接的空格问题。
内容的提问来源于stack exchange,提问作者Luis Kaiseler
相关产品推荐
相关产品推荐

