程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了switch 语句总是在第一个选择上执行大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决switch 语句总是在第一个选择上执行?

开发过程中遇到switch 语句总是在第一个选择上执行的问题如何解决?下面主要结合日常开发的经验,给出你关于switch 语句总是在第一个选择上执行的解决方法建议,希望对你解决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 进行比较。在这种情况下,这些检查将始终为假,否则将执行部分

您需要将随机变量的值而不是 rockscissorspaper 作为函数中的第二个参数传递。

大佬总结

以上是大佬教程为你收集整理的switch 语句总是在第一个选择上执行全部内容,希望文章能够帮你解决switch 语句总是在第一个选择上执行所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。