var check = true;
var number = Math.floor(Math.random() * 20);
while (check === true){
var guess = prompt("I picked a number 0 to 20, try to guess it!");
if (number === guess) {
print("You guessed correctly! Good job!");
check = false;
}
else if (number < guess) {
print("\n\You guessed too high!");
}
else if (number > guess) {
print("\n\You guessed too low!");
}
else {
print("\n\Error. You did not type a valid number");
exit();
}
print("\n\Guess: " + guess + ".");
}
当我尝试运行此程序时,我会一直得到正确的答案,但它不起作用!即使随机生成的数字是13,我估计13,它会通过,它会说它无效。
答案 0 :(得分:2)
你的猜测是一个字符串。这是用户输入的文本,您需要将其转换为数字,以便能够将其与您的猜测进行比较,以便替换
var guess = prompt("I picked a number 0 to 20, try to guess it!");
带
var guess = Number(prompt("I picked a number 0 to 20, try to guess it!");
如果格式不正确,这会将您的用户猜测转换为数字或特殊值NaN。
您还可以使用==运算符,它将自动在类型之间进行转换。如果你是javascript的新手,我建议不要使用运算符,因为它可能会有一些令人困惑和意外的行为。
答案 1 :(得分:1)
您正在将prompt
(字符串)的返回值与Math.floor
(数字)的返回值进行比较。
由于您使用的是===
且它们是不同的数据类型,因此您永远不会得到匹配。
使用==
或明确地将数字转换为字符串,反之亦然。
number === +guess
答案 2 :(得分:1)
===是严格类型的,所以它不会将int与字符串进行比较。
将guess转换为整数。您应首先验证它,以防用户输入除int之外的其他内容。
var guessInt = +guess; // the plus converts to an integer
if(isNaN(guessInt))
continue;
if (number === guessInt) {
print("You guessed correctly! Good job!");
check = false;
}
答案 3 :(得分:0)
您正在使用triple =运算符来检查类型相等性。将提示值(您的guess
变量)与number
变量进行比较时。您正在比较String
和Number
。为了完成这项工作,您可以使用
number == guess
或
Number(guess)
答案 4 :(得分:0)
您正在使用严格的相等比较,它也会比较类型。
queue
返回字符串值。使用prompt
转换为数字。
parseInt
第二个参数表示数字基数(10表示十进制数,16表示十六进制数等)。在非严格模式(也称为草率模式)中,在解析具有前导零的字符串时,您可能会偶然转换为八进制(基数为8)。始终指定基础以避免这种情况。