一个微小的“猜数字”游戏不能按预期工作

时间:2014-10-22 18:23:31

标签: javascript

我尝试在JavaScript中创建一个愚蠢的小游戏,您可以提示您猜测1-10之间的数字。然后计算机随机选择一个数字,如果它与您猜到的相同,那就是#34;你猜对了!",否则"再试一次!"。

但是,计算机输入和用户输入绝对不一样! 我做错了什么?

var userChoice = prompt("Make a guess from 1 to 10");
var computerChoice = Math.random();

if (computerChoice < 0.1) {
    computerChoice = 1;
}
else if (computerChoice < 0.2){
    computerChoice = 2;
}
else if (computerChoice < 0.3){
    computerChoice = 3;
}
else if (computerChoice < 0.4){
    computerChoice = 4;
}
else if (computerChoice < 0.5){
   computerChoice = 5;
}
else if (computerChoice < 0.6){
    computerChoice = 6;
}
else if (computerChoice < 0.7){
    computerChoice = 7;
}
else if (computerChoice < 0.8){
    computerChoice = 8;
}
else if (computerChoice < 0.9){
    computerChoice = 9;
}
else {
    computerChoice = 10;
}

var compare = function(choice1, choice2){
    if (choice1 === choice2){
        console.log("You guessed right!");
    }
    else{
        console.log("Try again!");
    }
};

compare(userChoice, computerChoice);

4 个答案:

答案 0 :(得分:2)

您在userChoice函数中使用computerChoice将字符串(===)与数字compare进行比较。这将始终返回false。请改用==,因为它会在比较之前将用户输入强制转换为数字。

答案 1 :(得分:0)

首先,欢迎来到StackOverflow,我祝你在编程冒险中一切顺利! JavaScript prompt方法返回一个字符串,您将其与计算机的数字输入进行比较。您应该通过parseInt()将字符串输入转换为数字。

var userChoice = parseInt(prompt("Make a guess from 1 to 10"));

您可以通过额外的错误处理来改进程序,并且计算机的数字选择可能更有效,但这应该可以帮助您入门。

答案 2 :(得分:0)

如果您的变量computerChoice是一个数字(Math.random返回一个数字),您可能需要在函数之前将userChoice变量转换为数字比较值。

为此,您可以使用 parseInt() 功能:

compare(parseInt(userChoice), computerChoice);

使用严格相等运算符===,您将需要值和类型相同。

函数prompt()总是返回一个字符串。

一些链接:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

答案 3 :(得分:0)

&#13;
&#13;
function id(sel) {return document.getElementById(sel); }

var $usrINP  = id("usrINP"),
    $playBTN = id("playBTN"),
    $resDIV  = id("resDIV");

function compare(){
    var userNum = parseInt( $usrINP.value, 10 ),
        compNum = Math.ceil( Math.random() * 10 ),
        result  = "YOU:"+userNum+" COMPUTER:"+compNum+"<br>";
    if(!userNum || userNum > 10) return alert("Enter a valid Number from 1-10");
    result += userNum===compNum ? "YOU WON!" : "WRONG!";
    $resDIV.innerHTML = result;    
}

$playBTN.addEventListener("click", compare, false);
&#13;
<input id=usrINP type=text maxlength=2>
<input id=playBTN type=button value=Play>
<div id=resDIV></div>
&#13;
&#13;
&#13;

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
https://developer.mozilla.org/en-US/docs/Web/API/Element.innerHTML

在您的示例中(&#34;字符串&#34; )&#34; 2&#34;,使用=== 严格平等,永远不会匹配2数字),因此请使用==(宽松等式)或parseInt您的输入值。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
Which equals operator (== vs ===) should be used in JavaScript comparisons?