2017-07-09 18 views
0

"Math.floor not working"の質問が増えていますが、私の答えは見つからなかったので、私はこの質問をしました。Javascript - Math.floorは機能しません

私は範囲の間にジャンプしてあなたの番号を探している簡単なアルゴリズムを作っています。たとえば、range = 100、number = 60です。これは50になります。より高いので、範囲は50 - 100です。次に、それが大きいか小さいかを調べるために75にジャンプします。正しい番号。

これをもう少し明確にするために、私は「私はMath.floorを使って下に丸めます」と考えました。しかし何らかの理由でそれはうまくいかない。

マイコード:

var guessTheNumber = function() { 
 

 
    var validNumber = false; // Geldig nummer = niet waar 
 
    var userNumberHTML = document.getElementById("userNumberHTML"); // Noem HTML element met ID "userNumberHTML" "userNumberHTML" 
 
    var guessedNumbers = document.getElementById("guessedNumbers"); // noem HTML element met ID "guessedNumbers" "guessedNumbers" 
 
    guessedNumbers.innerHTML = "Guessed number(s): "; 
 
    var minNumber = 0; // Minimum wat mensen kunnen invullen 
 
    var maxNumber = 100; // Maximum wat mensen kunnen invullen 
 
    var userNumber = prompt("Tell me a number between 0 and 100, including those (numbers with decimals will be rounded downwards)."); // Vraag gebruiker welk nummer 
 
    userNumber = Math.floor(userNumber); // Nummer wordt naar beneden afgerond 
 
    var counter = 1; 
 
    var result = 0; 
 
    var q = 1; 
 

 
    if (userNumber >= minNumber && userNumber <= maxNumber) { // Als het een getal is groter of gelijk aan 1 en kleiner of gelijk aan 100 
 
    userNumberHTML.innerHTML = "Your number: " + userNumber; // Geef "x" in HTML de waarde van "userNumber", namelijk het genoemde getal 
 
    } else { // Anders 
 
    while (validNumber == false) { // Zolang validNumber NIET waar is 
 
     userNumber = prompt("This is not a number between 0 and 100. Try again."); // wordt "userNumber" de waarde van de nieuwe prompt 
 
     if (userNumber >= 1 && userNumber <= 100) { // Als het een getal is groter of gelijk aan 1 en kleiner of gelijk aan 100 
 
     userNumberHTML.innerHTML = "Your number: " + userNumber; // Geef "x" in HTML de waarde van "userNumber", namelijk het zojuist genoemde getal 
 
     validNumber = true; // Zet validNumber op WEL waar 
 
     } 
 
    } 
 
    } 
 

 
    result = (minNumber + maxNumber)/2; 
 
    Math.floor(result); 
 
    guessedNumbers.innerHTML += result + ", "; 
 

 
    while (result != userNumber) { 
 
    if (result < userNumber) { 
 
     Math.floor(result); 
 
     minNumber = result; 
 
    } else { 
 
     Math.floor(result); 
 
     maxNumber = result; 
 
    } 
 
    result = (minNumber + maxNumber)/2; 
 
    guessedNumbers.innerHTML += result + ", "; 
 
    q++; 
 
    } 
 

 
    guessedNumbers.innerHTML += "and there you go!"; 
 
    alert("The PC guessed your number in " + q + " times!"); 
 
    if (confirm("Try again?")) { 
 
    guessedNumbers.innerHTML = "Guessed number(s): "; 
 
    guessTheNumber(); 
 
    } 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>JS test</title> 
 
</head> 
 

 
<body> 
 
    <button onclick="guessTheNumber()" style="height: 100px; width: 200px;">Let the Computer find your number!</button> 
 
    <p id="userNumberHTML">Your number: </p> 
 
    <p id="guessedNumbers">Guessed number(s): </p> 
 
    <p id="TEST"></p> 
 

 
    <!-- SCRIPTS --> 
 
    <!-- <script type="text/javascript" src="guessTheNumber.js"></script> --> 
 
    <script type="text/javascript" src="test.js"></script> 
 
</body> 
 

 
</html>

それが必要のようなユーザ入力がMath.floorを行いますので、私は本当に、私が間違っているのかわかりません!すべてのヘルプは高く評価されて:)あなたが使用する必要がありますので、事前に

おかげで、
ブレント

+0

あなたは、いくつかの 'にconsole.logに落ちたことがありますを使用することを検討した結果を修正するため、効果がありませんではないでしょう() 'が呼び出され、ループの実行中にあなたの数値がどのように変化しているかを確認できますか? – Pointy

+0

答えに加えてもう1つ注意すべきことは、「Math.Floor」は小数点以下を切り捨てることです。たとえば、最も近い10に丸めたい整数があれば、 'Math.Floor'は何もしません。 – stybl

+0

@stybl彼は2で割っているので、数字が奇数の場合は小数点を削除します。 – Barmar

答えて

2

Math.floor(result)は、結果を返します:

result = Math.floor(result); 
2

Javascriptのパラメータが値ではなく、参照によって渡され、関数はパラメータ変数を変更できません。結果を割り当てる必要があります。

result = Math.floor(result); 
-1

これは、userNumberが文字列であるためです。ちょうどparseInt(userNumber)を使用すればうまくいくはずです。 また、ある種の入力タイプコントロールを追加する必要があります。


編集: 他の人が指摘したように、あなたも変数に値を割り当てる必要があります。私はちょうど最初の使用Math.floor()を見て、それが唯一の問題だと思った。

まとめると、あなたが持っている必要があります:最初の userNumber = Math.floor(parseInt(userNumber))を、あなたはNaNを取得して、適切な値を取得するためにresult = Math.floor(result)を使用しないでください。

+0

質問は 'Math.floor(result) 'についてです – Barmar

+0

文字列と数字を比較するとJavascriptは自動的に型変換を行います。 – Barmar

1

あなたは

Math.floor(result); 

を書いたが、それは

result = Math.floor(result); 

代わり

関連する問題