Javascript Switch语句总是在第一个选项上执行
我试图创造一个石头、布、剪刀的游戏。问题是我的switch语句总是在第一个选项上执行。 i、 e传递的值为 (摇滚、电脑)总是产生“你赢了!” (剪刀、电脑)返回“这是一条领带” (纸张、计算机)返回“你输了” 我正在运行一组大约10个测试,根据我的输出,我注意到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)
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进行比较?您的问题就在这里。