Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 猜密码程序不工作了?_Javascript_Loops_For Loop_Infinite Loop - Fatal编程技术网

Javascript 猜密码程序不工作了?

Javascript 猜密码程序不工作了?,javascript,loops,for-loop,infinite-loop,Javascript,Loops,For Loop,Infinite Loop,这个程序的目的是猜测一个随机生成的4位密码,然后输出获得正确代码所需的猜测次数,但什么也没有发生 我的方法是使用for循环来尝试数字0-9的四位数字的每一个可能组合。这是在一个无限循环中,只有在猜测密码时才会中断循环 我不知道我的程序出了什么问题,没有打印任何内容,但程序不会无限循环 function start() { var secretPasscode = generateRandomPasscode(); var i = 0; while(true){

这个程序的目的是猜测一个随机生成的4位密码,然后输出获得正确代码所需的猜测次数,但什么也没有发生

我的方法是使用for循环来尝试数字0-9的四位数字的每一个可能组合。这是在一个无限循环中,只有在猜测密码时才会中断循环

我不知道我的程序出了什么问题,没有打印任何内容,但程序不会无限循环

function start() {
    var secretPasscode = generateRandomPasscode();

    var i = 0;
    while(true){
        i++;

        var guess = "";

        for(var firstDigit = 0; firstDigit <= 9; firstDigit++){
            guess += firstDigit;
            for(var secondDigit = 0; secondDigit <= 9; secondDigit++){
                guess += secondDigit;
                for(var thirdDigit = 0; thirdDigit <= 9; thirdDigit++){
                    guess += thirdDigit;
                    for(var fourthDigit = 0; fourthDigit <= 9; fourthDigit++){
                        guess += fourthDigit;
                    }
                }
            }
        }
        return guess;

        if(guess == secretPasscode){
            break;
        }
        println("It took " + i + " guesses to get the correct");
    }

}
这是生成随机密码的代码:

function generateRandomPasscode() {
    var randomPasscode = "";

    for(var i = 0; i < 4; i++) {
        var randomDigit = Randomizer.nextInt(0, 9);
        randomPasscode += randomDigit;
    }

    return randomPasscode;
}

更紧密的实现将认识到猜测算法只是0中的密码的穷举枚举,因此猜测可以更紧凑地用整数表示,而不是字符串,因此

function start() {
    var secretPasscode = generateRandomPasscode();
    for (var guessInt = 0; guessInt < 1000; guessInt++) {
        let guess = pad(`${guessInt}`,4);
        if(guess === secretPasscode){
            println(`we just started counting, and found the passcode at ${guessInt} `);
            break;
        }
    }
}

function pad(str, length) {
    while (str.length < length) str = '0' + str;
    return str;
}

看到循环后面写着return guess的那行了吗?这将是start函数执行的结束。尝试删除它。还要注意,println将在每次迭代中执行,最后一次除外。将其放入“猜测是正确的”条件中,使其仅在完成后运行。也许,也可以为循环添加一些安全性,以便在大量迭代之后停止,不管您是否找到了解决方案。谢谢您的建议。关于println,您是对的,但是,删除return语句会使代码无限循环……啊,这意味着您的循环永远找不到解决方案。不要马上返回来解决问题,要找到解决方案来解决问题。