繁体   English   中英

当我将随机数生成器/猜测器放入函数时,我的JavaScript代码崩溃了。 为什么会崩溃?

[英]My javascript code is crashing when I put a random number generator/guesser into a function. Why does it crash?

我建立了一个随机数发生器,用于猜测数字。 我限制了这个数字猜测者不要问两次相同的数字,这在函数之外有效。 一旦将数字生成器/猜测器放入函数中,每几次尝试都会使窗口崩溃。 我相信这与无限循环中生成的数字有关。 谁能看到问题所在?

编辑:对于那些也喜欢看HTML的人。 在JS之前,我有两个简单的输入:

<body>

    <p>Think of a number!</p>

    <select name="fingers" id="mynumber">
        <option>0</option>
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
        <option>5</option>
    </select>

    <button id="startguess">Start guessing my number!</button>

以下是全局变量:

        var guessed = [""];

        var guess = "";

这是函数:

        function doaguess(correctanswer) {

            guess = Math.floor(Math.random() * 6);

            var n = "";

            n = guessed.includes(guess);

            if (n == true) {

                guess = Math.floor(Math.random() * 6);

            } else {

                if (guess == correctanswer) {

                    return (true);

                } else {

                    return (false);

                }

            }

        }

脚本的其余部分是这样的:

        document.getElementById("startguess").onclick = function() {

            var mynumber = document.getElementById("mynumber").value;

            var gotit = false;

            var numberofguesses = 1;

            while (gotit == false) {

                if (doaguess(mynumber) == true) {

                    gotit = true;

                    alert("Got it! It was a " + mynumber + ". It took me " + numberofguesses + " guesses.");

                } else {

                    numberofguesses++;
                    guessed.push(guess);

                }

            }

        }

一切正常,直到我将生成器移到函数doaguess() 我尝试将变量从局部变量移到全局变量以更改范围,这使代码起作用,但现在崩溃了。 任何帮助表示赞赏。

编辑:对于那些也喜欢看HTML的人。 在JS之前,我有两个简单的输入:

如果您猜出(n == true)之后的数字,那么您什么也不返回,并且该猜想可能是重复的,应该进入循环并寻找新的猜想。 当您猜测这种情况下的数字时,结果将不正确,并且正确的答案会添加到guessed数组中,从而导致无限循环。

固定:

n = guessed.includes(guess);


while (n == true) {

    guess = Math.floor(Math.random() * 6);
    n = guessed.includes(guess);    
}

if (guess == correctanswer) {

       return (true);

   } else {

       return (false);
}

其这一行guessed.push(guess); 应该被guessed.push(mynumber);

它在这里工作:

 var guessed = [""]; var guess = ""; function doaguess(correctanswer) { guess = Math.floor(Math.random() * 6); var n = guessed.includes(guess); if (n === true) { guess = Math.floor(Math.random() * 6); } else { return guess == correctanswer; } } document.getElementById("startguess").onclick = function() { var mynumber = document.getElementById("mynumber").value; var gotit = false; var numberofguesses = 1; while (!gotit) { if (doaguess(mynumber)) { gotit = true; alert("Got it! It was a " + mynumber + ". It took me " + numberofguesses + " guesses."); } else { numberofguesses++; guessed.push(mynumber); } } } 
 <button id="startguess">Guess</button> <input id="mynumber" type="number"></input> 

我发现了问题。 每次我尝试提供一个数字时变量都不会重置,因此,如果我多次尝试而不重新加载页面,则该变量似乎不起作用,因为存储数字而不是在每个新的“播放”中重置数字。 要解决这一点,我需要重新设置变量和数组guessguessed每个时间onclick被按下。 像这样:

        document.getElementById("startguess").onclick = function() {

            guessed = [""];

            guess = "";

            var mynumber = document.getElementById("mynumber").value;

            var gotit = false;

            var numberofguesses = 1;

            while (gotit == false) {

                if (doaguess(mynumber) == true) {

                    gotit = true;

                    alert("Got it! It was a " + mynumber + ". It took me " + numberofguesses + " guesses.");

                } else {

                    numberofguesses++;
                    guessed.push(guess);

                }

            }

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM