Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Switch语句总是在第一个选项上执行_Javascript_Switch Statement - Fatal编程技术网

Javascript Switch语句总是在第一个选项上执行

Javascript Switch语句总是在第一个选项上执行,javascript,switch-statement,Javascript,Switch Statement,我试图创造一个石头、布、剪刀的游戏。问题是我的switch语句总是在第一个选项上执行。 i、 e传递的值为 (摇滚、电脑)总是产生“你赢了!” (剪刀、电脑)返回“这是一条领带” (纸张、计算机)返回“你输了” 我正在运行一组大约10个测试,根据我的输出,我注意到switch语句一定是错误的 有什么想法吗?提前谢谢 var computer = Math.random() function game(user, computer) { if (computer < .34)

我试图创造一个石头、布、剪刀的游戏。问题是我的switch语句总是在第一个选项上执行。 i、 e传递的值为 (摇滚、电脑)总是产生“你赢了!” (剪刀、电脑)返回“这是一条领带” (纸张、计算机)返回“你输了”

我正在运行一组大约10个测试,根据我的输出,我注意到switch语句一定是错误的

有什么想法吗?提前谢谢

var computer = Math.random()

function game(user, computer)
{
    if (computer < .34)
    {
      computer = "rock";
    }

    else if (computer > .33 && computer < .67)
    {
      computer = "paper";
    }

    else 
    {
      computer = "scissors";
    }
    let result = ""; 

    if (user === "rock")
    {
      switch(computer) 
      {
        case "scissors":
          result = "you win!";
          break;

        case "paper":
          result = "you lose";
          break;

        case "rock":
        result = "its a tie";
        break;
      }
    
    return result;
    }

    else if (user === "paper")
    {
      switch(computer) 
      {
        case "scissors":
          result = "you lose!";
          break;

        case "paper":
          result = "its a tie";
          break;

        case "rock":
          result =  "you win!";
          break;
      }
      return result;
    }


    if (user === "scissors")
    {
      switch(computer)
       {
        case "scissors":
          result = "its a tie";
          break;

        case "paper":
          result =  "you win!";
          break;

        case "rock":
          result = "you lose!";
          break;
      }

      return result;
    }   
}```


describe('gameFunction', ()=>{
    it('return win, lose or tie', ()=>{
        expect(functions.game('rock', 'scissors')).toBe('you win!');
    })
    it('return win, lose or tie', ()=>{
        expect(functions.game('rock', 'paper')).toBe('you lose!');
    })
    it('return win, lose or tie', ()=>{
        expect(functions.game('rock', 'rock')).toBe(`it's a tie`);
    })
    it('return win, lose or tie', ()=>{
        expect(functions.game('paper', 'rock')).toBe(`you win!`);
    })
    it('return win, lose or tie', ()=>{
        expect(functions.game('paper', 'scissors')).toBe(`you lose!`);
    })
    it('return win, lose or tie', ()=>{
        expect(functions.game('paper', 'paper')).toBe(`it's a tie`);
    })
    it('return win, lose or tie', ()=>{
        expect(functions.game('scissors', 'paper')).toBe(`you win!`);
    })
    it('return win, lose or tie', ()=>{
        expect(functions.game('scissors', 'rock')).toBe(`you lose!`);
    })
});
var computer=Math.random()
功能游戏(用户、计算机)
{
if(计算机<.34)
{
computer=“rock”;
}
否则如果(计算机>0.33和计算机<0.67)
{
计算机=“纸张”;
}
其他的
{
计算机=“剪刀”;
}
让结果=”;
如果(用户==“摇滚乐”)
{
交换机(计算机)
{
案例“剪刀”:
结果=“你赢了!”;
打破
案例“文件”:
结果=“你输了”;
打破
案例“岩石”:
result=“这是一个平局”;
打破
}
返回结果;
}
else if(用户==“纸张”)
{
交换机(计算机)
{
案例“剪刀”:
结果=“你输了!”;
打破
案例“文件”:
result=“这是一个平局”;
打破
案例“岩石”:
结果=“你赢了!”;
打破
}
返回结果;
}
如果(用户==“剪刀”)
{
交换机(计算机)
{
案例“剪刀”:
result=“这是一个平局”;
打破
案例“文件”:
结果=“你赢了!”;
打破
案例“岩石”:
结果=“你输了!”;
打破
}
返回结果;
}   
}```
描述('gameFunction',()=>{
它(‘赢、输或平’,()=>{
期望(功能、游戏(“石头”、“剪刀”)、托比(“你赢了”);
})
它(‘赢、输或平’,()=>{
expect(functions.game('rock','paper')).toBe('youloss!');
})
它(‘赢、输或平’,()=>{
expect(functions.game('rock','rock')).toBe('it'satie');
})
它(‘赢、输或平’,()=>{
expect(functions.game('paper','rock')).toBe('youwin!`);
})
它(‘赢、输或平’,()=>{
expect(functions.game('paper','剪刀')).toBe('youlose!`);
})
它(‘赢、输或平’,()=>{
expect(functions.game('paper','paper')).toBe('it'satie');
})
它(‘赢、输或平’,()=>{
expect(functions.game('scissor','paper')).toBe('youwin!`);
})
它(‘赢、输或平’,()=>{
expect(functions.game(‘剪刀’、‘石头’).toBe(‘你输了!’);
})
});

虽然您正在使用随机函数为计算机变量生成随机数,但您使用的是错误的。虽然它是全局的,但由于我们在游戏函数中有计算机作为参数,所以将使用该变量

<> P>它会考虑你传递给它的那些值。

例如: 在这个调用
expect(functions.game('rock','scissors')).toBe('youwin!')中,您正在传递计算机变量的剪刀。您的函数将
剪刀
.34
.33
.67
进行比较。在这种情况下,这些检查将始终为假,否则将执行部分检查


您需要传递随机变量的值,而不是作为函数中的第二个参数传递
rock
scissors
paper

在测试中,您传递的是字符串作为第二个(
computer
)参数。例如,此测试通过“剪刀”:

   it('return win, lose or tie', ()=>{
        expect(functions.game('rock', 'scissors')).toBe('you win!');
    })
但是您的
游戏
函数期望得到一个数字(由Math.random()生成)

这种混淆可能与您正在声明一个名为
computer
的全局变量有关:

var computer = Math.random()
但是,当您使用相同的标识符作为函数的参数名时,您的函数对该全局变量不可见。也就是说,函数中对
computer
的任何引用都将引用名为
computer
的参数,而不是声明名为
computer
的全局变量

解决此问题的一种方法是在测试中向函数传递数字:

 it('return win, lose or tie', ()=>{
        expect(functions.game('rock', 0.1)).toBe('you win!');
 })

请向我们展示您正在调用
游戏的那十个测试。您真的为
计算机
参数传递了一个数字吗?您是否传递了一个实际数字作为第二个参数?否则,您的
If
测试将失败,并且函数中的
计算机
将始终被分配
剪刀
。您为计算机传递的值是多少?在您的所有测试中,computer的值似乎都大于0.67。我已更新以显示测试,并在每次调用时将computer顶部声明为随机数。为什么要使用if-else语句将其与.34、.33、.67进行比较?您的问题就在这里。