簡體   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