为什么这段代码显示"paper"?
Why does this code displays "paper"?
我正在尝试这个 JavaScript 代码,这是 Codeacademy 网站上的一个练习。
但问题是它在控制台中显示“paper”。它应该显示“scissors”?
问题是什么?我做错了什么吗?
这是JavaScript:
var userChoice= prompt("Do you choose rock, paper or scissors");
var computerChoice=0.35;
console.log(computerChoice);
if(0<computerChoice<0.33){
computerChoice="rock";
}
else if(0.34<computerChoice<0.66){
computerChoice="scissors";
}
else{
computerChoice="paper";
}
console.log(computerChoice);
你不能写这样的表达式
if(0 < computerChoice < 0.33)
在 Javascript 中。你必须把它分成两个表达式:
if(0 < computerChoice && computerChoice < 0.33)
您需要将小于、大于检查分成两部分。
if(computerChoice>0 && computerChoice<0.33){
同样的事情需要对另一个做。
这是错误的语法。 a < b < c
无效 JavaScript。您必须在块中创建两个条件。
if ( 0 < computerChoice < 0.33)
应该是
if (computerChoice > 0 && computerChoice < 0.33)
查看此代码段。
var cpuChoice = document.getElementById("cpu-selection");
var userChoice = prompt("Do you choose rock, paper or scissors");
var computerChoice = 0.35;
//console.log(computerChoice);
if (computerChoice > 0 && computerChoice < 0.33) {
computerChoice = "rock";
}
else if (computerChoice > 0.34 && computerChoice < 0.66) {
computerChoice = "scissors";
}
else {
computerChoice = "paper";
}
cpuChoice.innerHTML = computerChoice;
<p id="cpu-selection"></p>
我认为基于范围的不等式在 JavaScript 中是非法的,左右不等式。因为 JavaScript 是弱类型的,我猜它会评估一个不等式并得到一个真值或假值,然后将其转换为一个数字。
我的猜测是 0 < 计算机选择为真,如果大于则将转换为 1。 33,对于第二个 if .34 < computer choice which is true and cast to 1 which is > .66 所以那是假的,所以 else 语句被评估
试试 0 < computerChoice&& computerChoice < .33
等
编辑:我回到电脑前进行了测试,我在 google chrome
中体验了这些结果
true < 1 // false
true > 1 // false
true == 1 // true
(注意:经验可能有所不同,我不会将这种行为称为定义明确的典型强类型语言,但它可能在 JavaScript 中定义为这种行为)
x < y < z
被评估为
(x < y) < z
在你的情况下,
0 < computerChoice < 0.33
>> (0 < computerChoice) < 0.33
>> true < 0.33
>> false //always
*旁注:这同样适用于相等运算符。 x == y == z
嗯,这对您不起作用的原因是因为 TRUE 不小于 0.66。表达式将像这样计算
(0.36 < computerChoice ) => true if (computerchoice = 0.35 )
现在下一部分是 ( true < 0.66 ),这是错误的。所以 expression 的计算结果为 false。 Approach: 0.34<computerChoice==computerChoice<0.66
快乐编码:)
自从您使用了这个:
if(computerChoice < 0.33){ ... }
你的下一个语句是 else if
,你实际上可以从你的第二个 if
中删除 0.34<
,因为它已经给出它大于 0.34,因为 if
之前是假的。
if(computerChoice < 0.33){
computerChoice = "rock";
}else if(computerChoice < 0.66){
computerChoice = "scissors";
}else{
computerChoice = "paper";
}
您也不需要检查 computerChoice 是否小于 0,因为 Math.random 总是 returns 值介于 0 和 1 之间。
我正在尝试这个 JavaScript 代码,这是 Codeacademy 网站上的一个练习。 但问题是它在控制台中显示“paper”。它应该显示“scissors”? 问题是什么?我做错了什么吗?
这是JavaScript:
var userChoice= prompt("Do you choose rock, paper or scissors");
var computerChoice=0.35;
console.log(computerChoice);
if(0<computerChoice<0.33){
computerChoice="rock";
}
else if(0.34<computerChoice<0.66){
computerChoice="scissors";
}
else{
computerChoice="paper";
}
console.log(computerChoice);
你不能写这样的表达式
if(0 < computerChoice < 0.33)
在 Javascript 中。你必须把它分成两个表达式:
if(0 < computerChoice && computerChoice < 0.33)
您需要将小于、大于检查分成两部分。
if(computerChoice>0 && computerChoice<0.33){
同样的事情需要对另一个做。
这是错误的语法。 a < b < c
无效 JavaScript。您必须在块中创建两个条件。
if ( 0 < computerChoice < 0.33)
应该是
if (computerChoice > 0 && computerChoice < 0.33)
查看此代码段。
var cpuChoice = document.getElementById("cpu-selection");
var userChoice = prompt("Do you choose rock, paper or scissors");
var computerChoice = 0.35;
//console.log(computerChoice);
if (computerChoice > 0 && computerChoice < 0.33) {
computerChoice = "rock";
}
else if (computerChoice > 0.34 && computerChoice < 0.66) {
computerChoice = "scissors";
}
else {
computerChoice = "paper";
}
cpuChoice.innerHTML = computerChoice;
<p id="cpu-selection"></p>
我认为基于范围的不等式在 JavaScript 中是非法的,左右不等式。因为 JavaScript 是弱类型的,我猜它会评估一个不等式并得到一个真值或假值,然后将其转换为一个数字。
我的猜测是 0 < 计算机选择为真,如果大于则将转换为 1。 33,对于第二个 if .34 < computer choice which is true and cast to 1 which is > .66 所以那是假的,所以 else 语句被评估
试试 0 < computerChoice&& computerChoice < .33
等
编辑:我回到电脑前进行了测试,我在 google chrome
中体验了这些结果true < 1 // false
true > 1 // false
true == 1 // true
(注意:经验可能有所不同,我不会将这种行为称为定义明确的典型强类型语言,但它可能在 JavaScript 中定义为这种行为)
x < y < z
被评估为
(x < y) < z
在你的情况下,
0 < computerChoice < 0.33
>> (0 < computerChoice) < 0.33
>> true < 0.33
>> false //always
*旁注:这同样适用于相等运算符。 x == y == z
嗯,这对您不起作用的原因是因为 TRUE 不小于 0.66。表达式将像这样计算
(0.36 < computerChoice ) => true if (computerchoice = 0.35 )
现在下一部分是 ( true < 0.66 ),这是错误的。所以 expression 的计算结果为 false。 Approach: 0.34<computerChoice==computerChoice<0.66
快乐编码:)
自从您使用了这个:
if(computerChoice < 0.33){ ... }
你的下一个语句是 else if
,你实际上可以从你的第二个 if
中删除 0.34<
,因为它已经给出它大于 0.34,因为 if
之前是假的。
if(computerChoice < 0.33){
computerChoice = "rock";
}else if(computerChoice < 0.66){
computerChoice = "scissors";
}else{
computerChoice = "paper";
}
您也不需要检查 computerChoice 是否小于 0,因为 Math.random 总是 returns 值介于 0 和 1 之间。