所以我编写了一个基本的程序来和用户玩石头剪刀,但我的一个开关不合作。代码如下:
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行相同)。
//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在这个问题上的帮助。如果你对此有任何疑问,我认为你仍然可以发表意见,我会尽我最大的努力回应。
谢谢--蒙面鹰头狮
发布于 2014-01-28 08:51:34
编辑:userValue的类型为。开关中的大小写是Boolean类型。重构switch语句,使case使用与switch参数相同的var类型。
编辑:与初始问题无关,但仍然有用
尝试将比较运算符分成新的案例。这里有一个参考:multiple cases
下面是这篇文章中的代码以供参考:
switch (varName)
{
case "afshin":
case "saeed":
case "larry":
alert('Hey');
break;
default:
alert('Default case');
break;
}此外,这是一种猜测,将多个比较包装在括号中是否有帮助?
(userValue > computerValue || computerValue === 6 && userValue === 2)发布于 2021-01-27 06:45:38
你基本上可以把你的开关值换成true,这样你从你的条件中得到的结果就可以匹配这个值,并且可以应用于特定的情况,例如:
switch(true){
case userValue < computerValue || computerValue === 2 && userValue === 6:
console.log("case x is true");
break;
}==>如果此情况为真,则将应用console.log
发布于 2017-07-11 05:55:49
switch语句不能采用范围。switch案例标签必须是整数常量(还包括"char“或字符串)。您的case标签采用了switch语句所不具备的功能,即浮点值和两个不同变量的比较。案例标签必须是常量。
https://stackoverflow.com/questions/21394830
复制相似问题