大佬教程收集整理的这篇文章主要介绍了switch 语句总是在第一个选择上执行,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一个石头、纸和剪刀的游戏。问题是我的 switch 语句总是在第一个选项上执行。 即传递一个值 (摇滚,电脑)总是产生“你赢了!” (剪刀,计算机)返回“它是一条领带” (纸,电脑)返回“你输了”
我正在运行一组大约 10 个 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,'paper')).toBe('you lose!');
})
it('return win,'rock')).toBe(`it's a tIE`);
})
it('return win,()=>{
expect(functions.game('paper','rock')).toBe(`you win!`);
})
it('return win,'scissors')).toBe(`you lose!`);
})
it('return win,'paper')).toBe(`it's a tIE`);
})
it('return win,()=>{
expect(functions.game('scissors','paper')).toBe(`you win!`);
})
it('return win,'rock')).toBe(`you lose!`);
})
});
在您的测试中,您传入一个字符串作为第二个 (computer
) 参数。例如,这个测试通过'scissors':
it('return win,lose or tie',()=>{
expect(functions.game('rock','scissors')).toBe('you win!');
})
但是您的 game
函数希望得到一个数字(由 Math.random() 生成)。
混淆可能与您声明了一个名为 computer
的全局变量这一事实有关:
var computer = Math.random()
但是当您使用相同的标识符作为函数的参数名称时,您的函数对该全局变量不可见。也就是说,在您的函数中对 computer
的任何引用都将引用名为 computer
的参数,而不是您声明的名为 computer
的全局变量。
解决此问题的一种方法是在测试中将数字传递给函数:
it('return win,0.1)).toBe('you win!');
})
,
虽然您使用随机函数为计算机变量生成随机数,但您使用错误。虽然它是全局的,但由于我们在游戏函数中将计算机作为参数,因此将使用该变量。
它会考虑你传递给它的那些值。
例如:
您正在此调用 expect(functions.game('rock','scissors')).toBe('you win!');
中传递计算机变量的剪刀。您的函数会将 scissors
与 .34
、.33
、.67
进行比较。在这种情况下,这些检查将始终为假,否则将执行部分。
您需要将随机变量的值而不是 rock
、scissors
和 paper
作为函数中的第二个参数传递。
以上是大佬教程为你收集整理的switch 语句总是在第一个选择上执行全部内容,希望文章能够帮你解决switch 语句总是在第一个选择上执行所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。