【问题标题】:Guess the Passcode program not working?猜猜密码程序不起作用?
【发布时间】:2018-02-14 02:53:10
【问题描述】:

这个程序是用来猜测一个随机生成的 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;
}

【问题讨论】:

  • 看到return guess的循环后面的那一行?这将结束start 函数的执行。尝试删除它。
  • 另请注意,println 将在每次迭代除了最后一个迭代中执行。把它放在猜测是正确的条件下,让它在你完成后运行only。也许还可以为循环添加一些安全性,以在大量迭代后停止,无论您是否找到了解决方案。
  • 感谢您的建议。您对 println 的看法是正确的,但是,删除 return 语句会使代码无限循环...
  • 啊,这意味着您的循环永远找不到解决方案。不要通过立即返回来解决它,而是通过找到解决方案来解决它。

标签: javascript loops for-loop infinite-loop


【解决方案1】:

更严格的实现会意识到您的猜测算法只是从 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多