首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Javascript switch-statement中运行复杂操作

在Javascript switch-statement中运行复杂操作
EN

Stack Overflow用户
提问于 2014-01-28 08:48:13
回答 3查看 4K关注 0票数 1

所以我编写了一个基本的程序来和用户玩石头剪刀,但我的一个开关不合作。代码如下:

代码语言:javascript
复制
console.log("start rokpaperscissors")
var userString = prompt("Do you choose rock, paper, or scissors")
var computerRandom = Math.random()
//convert computerRandom into value and string
switch(computerRandom) {
    case computerRandom < 0.33: computerString = "rock"; computerValue = 2
        break;
    default: computerString = "paper"; computerValue = 4
        break;
    case computerRandom > 0.66: computerString = "scissors"; computerValue = 6
        break;
}
//convert userString into value
switch(userString) {
    case "rock": userValue = 2
        break;
    case "paper": userValue = 4
        break;
    case "scissors": userValue = 6
        break;
    default: console.log("debug @ line 12")
}
switch(userValue) {
    //if user wins, this code should run
    case userValue > computerValue || computerValue === 6 && userValue === 2:
        document.write("computer's choice: ")
            document.write(computerString)
            document.write("<br/>")
        document.write("your choice: ")
            document.write(userString)
            document.write("<br/>")
        document.write("you win")
        break;
    //if user loses, this code should run
    case userValue < computerValue || computerValue === 2 && userValue === 6: 
        document.write("computer's choice:")
            document.write(computerString)
            document.write("<br/>")
        document.write("your choice: ")
            document.write(userString)
            document.write("<br/>")
        document.write("sorry, you lose")
        break;
    //if userValue === computerValue, they tie and this code runs
    case computerValue:
        document.write("computer's choice: ")
            document.write(computerString)
            document.write("<br/>")
        document.write("your choice: ")
            document.write(userString)
            document.write("<br/>")
        document.write("tie game")
        break;
    default: console.log("debug @ line 22")
}

在用于显示输出的最后一个开关上,代码总是跳转到默认代码并打印debug @ line 22消息。我怀疑这是由于"case“行中的复杂操作造成的。这些操作在交换机中是不可能的吗?如果是,我的其他选择是什么?如果它们是允许的,那么它们的格式是否错误?

谢谢你的帮助

--带帽鹰头狮

我通过将"if-else if“语句与switch语句组合在一起来定义win、lose和tie来输出结果,从而解决了这个问题:下面是我的最后一段代码(前22行相同)。

代码语言:javascript
复制
//define win, lose, and tie cases as such
if(userValue === computerValue) {var resultString = "tie"}
    else if(userValue > computerValue || computerValue === 6 && userValue === 2) {var resultString = "win"}
    else if(userValue < computerValue || computerValue === 2 && userValue === 6) {var resultString = "lose"}
    else {console.log("debug @ line 56")}
//output result
switch(resultString) {
    case "win":
        document.write("computer's choice: ")
            document.write(computerString)
            document.write("<br/>")
        document.write("your choice: ")
            document.write(userString)
            document.write("<br/>")
        document.write("you win")
        break;
    case "lose":
        document.write("computer's choice: ")
            document.write(computerString)
            document.write("<br/>")
        document.write("your choice: ")
            document.write(userString)
            document.write("<br/>")
        document.write("sorry, you lose")
        break;
    case "tie":
        document.write("computer's choice: ")
            document.write(computerString)
            document.write("<br/>")
        document.write("your choice: ")
            document.write(userString)
            document.write("<br/>")
        document.write("tie game")
        break;
}

感谢jdigital,Matthew Booth和Matthew Lock在这个问题上的帮助。如果你对此有任何疑问,我认为你仍然可以发表意见,我会尽我最大的努力回应。

谢谢--蒙面鹰头狮

EN

回答 3

Stack Overflow用户

发布于 2014-01-28 08:51:34

编辑:userValue的类型为。开关中的大小写是Boolean类型。重构switch语句,使case使用与switch参数相同的var类型。

编辑:与初始问题无关,但仍然有用

尝试将比较运算符分成新的案例。这里有一个参考:multiple cases

下面是这篇文章中的代码以供参考:

代码语言:javascript
复制
switch (varName)
{
    case "afshin":
    case "saeed":
    case "larry": 
       alert('Hey');
    break;

    default: 
        alert('Default case');
    break;
}

此外,这是一种猜测,将多个比较包装在括号中是否有帮助?

代码语言:javascript
复制
(userValue > computerValue || computerValue === 6 && userValue === 2)
票数 1
EN

Stack Overflow用户

发布于 2021-01-27 06:45:38

你基本上可以把你的开关值换成true,这样你从你的条件中得到的结果就可以匹配这个值,并且可以应用于特定的情况,例如:

代码语言:javascript
复制
switch(true){
 case userValue < computerValue || computerValue === 2 && userValue === 6: 
  console.log("case x is true");
  break;
}

==>如果此情况为真,则将应用console.log

票数 1
EN

Stack Overflow用户

发布于 2017-07-11 05:55:49

switch语句不能采用范围。switch案例标签必须是整数常量(还包括"char“或字符串)。您的case标签采用了switch语句所不具备的功能,即浮点值和两个不同变量的比较。案例标签必须是常量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21394830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档