我正在编写一个程序来模拟二十一点游戏,我一直在使用开关来浏览菜单。它一直运行良好,但我想知道你是否可以扩展切换涉及多个案例。例如,每个玩家都有很多结果。例如,二十一点,二十一点与二十一点,玩家胸围&经销商没有破产,经销商破产,但玩家没有破产,玩家和经销商都破产,双倍下降和破产等等。有没有办法在这里使用开关比较多个变量,或者我是否必须堆叠if / else - 如果有多种条件?
答案 0 :(得分:3)
将你的评论转到@LeoCorrea的答案,你的条件似乎是布尔人。
也许尝试类似的事情:
final int PLAYER_BUST = 1 << 0;
final int DEALER_BUST = 1 << 1;
// ...
int total = 0;
total |= player.bust ? PLAYER_BUST : 0;
total |= dealer.bust ? DEALER_BUST : 0;
switch(total) {
case 0:
// neither player nor dealer has bust
break;
case PLAYER_BUST:
// just player bust, so dealer wins
break;
case DEALER_BUST:
// just dealer bust, so player wins
break;
case PLAYER_BUST | DEALER_BUST:
// both have bust
break;
}
1 << x
为2 ^ x,|
为按位OR。我的例子是n = 2,但是n可以是任何合理的数字。
这就像how PHP encodes its error levels。注意大多数级别如何用2的幂表示(二进制中只有一个'1'数字)。
我们在这些级别上使用|
来获得n个布尔值的组合结果。 int total
中的每个位代表其中一个条件。
由于n个布尔值有2 ^ n个可能的组合结果,我们可以将每个结果与n位的整数相匹配。我们无法启用n布尔值,但幸运的是,我们可以在代表n布尔值的整数switch
上使用total
。
答案 1 :(得分:1)
不幸的是,Java中不可能对多个变量switch
。除了@irrelephant建议的位掩码之外,您可以尝试重新考虑您的评估:
我并不完全熟悉二十一点,但我相信不是设置player.busted
和类似的字段,你可以将玩家的分数设置为-1
(或者,如果得分为30则是比得分25更差,你可以把它设置为-score
),然后简单地比较得分。
P.S。而不是
if (player.bust == false && dealer.bust == true)
你可以输入
if (!player.bust && dealer.bust)
它节省了大量的输入并且更具可读性。
答案 2 :(得分:0)
我不确定你说的是什么语言,因为你没有指定它,但是在Ruby中使用case语句(就像switch语句一样)
您可以执行类似
的操作case [A, B]
when [true, true] then ...
when [false, true] then ...
您还可以让多个条件输出相同的输出
case condition
when ("a" and "b")
# do something
when "c"
# do something
end
你的问题非常模糊,我认为你应该考虑让它更具体地使用你所使用的语言。