我正在编写一个程序来模拟二十一点游戏,并且我一直在使用 switch 来浏览菜单。它运行良好,但我想知道您是否可以扩展 switch 以涉及多个案例。例如,每个玩家都有很多结果。例如,二十一点,二十一点与二十一点,玩家破产和庄家不破产,庄家破产但玩家不破产,玩家和庄家破产,双倍下注和破产等。有没有办法在这里使用开关比较多个变量,还是我必须将 if/else-if 与多个条件堆叠在一起?
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,|
是按位或。我的例子是 n = 2,但 n 可以是任何合理的数字。
这类似于PHP 如何对其错误级别进行编码。请注意大多数级别是如何用 2 的幂表示的(二进制中只有一个“1”数字)。
我们|
在这些级别上使用来获得 n 个布尔值的组合结果。int 中的每一位total
代表一个条件。
由于 n 个布尔值有 2^n 种可能的组合结果,我们可以将每个结果与 n 位中的整数进行匹配。我们不能打开 n 个布尔值,但幸运的是,我们可以switch
在这个total
表示 n 个布尔值的整数上使用。
不幸的是,switch
在 Java 中不可能使用多个变量。除了@irrelephant 建议的位掩码,您可以尝试重新考虑您的评估:
我对二十一点并不完全熟悉,但我相信player.busted
您可以将玩家的分数设置为-1
(或者,如果获得 30 的分数比 25 的分数差,您可以将其设置为-score
) ,而不是设置和类似的字段然后简单地比较分数。
PS代替
if (player.bust == false && dealer.bust == true)
你可以输入
if (!player.bust && dealer.bust)
它节省了很多打字并且更具可读性。
我不确定您在说什么语言,因为您没有指定它,但是在 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
你的问题很模糊,我认为你应该考虑让它更具体到你使用的语言。