如何查看数字是否在"介于"值之间?

use*_*708 4 javascript

//初学者在一个程序中学习Js我被要求开始研究Rock,Paper,Scissors游戏这是我制作的代码,但计算机总是选择剪刀!?任何想法为什么?任何帮助都是极好的!

  1. 如果computerChoice介于0和0.33之间,则使computerChoice等于"rock".

  2. 如果computerChoice介于0.34和0.66之间,则使computerChoice等于"paper".

  3. 如果computerChoice在0.67和1之间,则使computerChoice等于"剪刀".

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

var computerChoice = Math.random();

if (computerChoice === (0 , 0.33)) {
    console.log("rock");
} else if (computerChoice === (0.34 , 0.66)) {
    console.log("paper");
} else {
    console.log("scissors");
}
Run Code Online (Sandbox Code Playgroud)

use*_*740 8

首先,你不能只是编写语法 - 它只是不起作用.编程是关于现有规则的应用,其中大多数规则不是您自己的规则.

在JavaScript中,由于逗号运算符,x === (a, b)在语义上等效于x === b(当a表达式没有副作用时),因此显然不起作用.在原始代码中,这确保了前两个条件(例如choice === 0.33)中没有一个匹配 - 因此始终选择默认/"剪刀".

虽然检查包容性范围的一般方法是x >= a && x <= b,我们可以通过依赖if条件评估的顺序和通过扩大范围的"英寸驱动"来做得比这更好.

if (choice <= 1/3) {
  console.log("rock");
} else if (choice <= 2/3) { /* choice > 1/3, per above */
  console.log("paper");
} else {                    /* choice > 2/3, per above */
  console.log("scissors");
}
Run Code Online (Sandbox Code Playgroud)

或者,我们也可以得到一个谨慎的随机整数,

/* get a random number 1, 2, or 3 */
var choice = Math.floor(Math.random() * 3 + 1);
Run Code Online (Sandbox Code Playgroud)

然后可以使用没有范围检查的直接相等

if (choice === 1) {
  console.log("rock");
} else if (choice === 2) {
  console.log("paper");
} else { /* choice === 3 */
  console.log("scissors");
}
Run Code Online (Sandbox Code Playgroud)