2016-02-05 117 views
0

我想弄清楚如何比较if语句中的字符串。我的大部分代码都可以忽略,但在上下文中是有用的。我试图给我的简单的岩石,纸张,剪刀游戏添加一条消息,以便当有人输入除岩石,纸张或剪刀以外的字符串时。有人能告诉我在星号附近有什么错误吗?在IF语句中比较字符串与逻辑运算符

var userChoice = prompt("Do you choose rock, paper or scissors?"); 

var computerChoice = Math.random(); 

if (computerChoice < 0.34) { 
    computerChoice = "rock"; 
} else if(computerChoice <= 0.67) { 
    computerChoice = "paper"; 
} else { 
    computerChoice = "scissors"; 
} console.log("Computer: " + computerChoice); 

var compare = function (choice1, choice2) { 
    if (choice1 === choice2) { 
     return "The result is a tie!"; 
    } 
**else if (choice1 !== "rock" || "paper" || "scissors") { 
    return "Your only options are rock, paper, or scissors you friggin plebian!"; 
}** 
else if (choice1 === "rock") { 
    if (choice2 === "scissors") { 
     return "Rock wins!"; 
    } 
    else { 
     return "Paper wins!"; 
    } 
} 
else if (choice1 === "paper") { 
    if (choice2 === "rock") { 
     return "Paper wins!"; 
    } 
    else { 
     return "Scissors wins!"; 
    } 
} 
else if (choice1 === "scissors") { 
    if (choice2 === "paper") { 
     return "Scissors wins!"; 
    } 
    else { 
     return "Rock wins!"; 
    } 
} 

};

compare (userChoice, computerChoice); 

回答

3
// ... 
else if (choice1 !== "rock" || choice1 !== "paper" || choice1 !== "scissors") { 
    return "Your only options are rock, paper, or scissors you friggin plebian!"; 
}  
// ... 

布尔表达式不读,因为我们可以用英语说出来,即“选择是不会动摇或纸张或剪刀”。将“选择”作为布尔值进行评估对于某些语言来说是一个完美的句法上有效的事情,所以请注意记住愚蠢地重复参数。否则,这些是需要一段时间才能找到的错误类型。 ;)

+0

我花了几个读数意识到你不是在叫我愚蠢的,而是语法。我需要一些睡眠,所以我可以继续学习,而不是把自己的头撞到我为自己创造的问题上。 感谢大家谁指出什么是一个愚蠢的错误,但只是学习的另一个步骤。 –

+0

@RanmaSaotome哈!我知道这种感觉很好。它发生在我们最好的人身上。有时在10分钟内做完全不同的事情会有所帮助。 – Neil

1

else if (choice1 !== "rock" || "paper" || "scissors")应该是:

else if (choice1 !== "rock" || choice1 !== "paper" || choice1 !== "scissors")

2

尝试:

else if (choice1 !== "rock" || choice1 !== "paper" || choice1 !== "scissors") 

你的说法不编译为 “选择1不等于摇滚,纸张或剪刀。”

编译器读取它为:

选择1不等于摇滚

OR

OR

剪刀

逻辑运算后的各部分必须评估为布尔值,所以它如果它不是摇滚的话,它只会匹配字符串,后面的两个字符不会匹配任何内容。