交替使用开关功能
我正在编写程序来模拟二十一点游戏,我一直在使用开关来浏览菜单。它一直很好地工作,但我想知道是否可以扩展交换机以涉及多个案例。例如,每个玩家都有很多成果。例如,二十一点,二十一点与二十一点,玩家胸围&经销商不破产,经销商破产但玩家不破产,玩家和经销商破产,双倍下跌和破产等。有没有一种方法可以在这里使用开关比较多个变量,还是我必须堆栈if/else-if与多个条件?交替使用开关功能
我不知道你说的是,因为你没有指定,但在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
你的问题很模糊,我想你应该考虑把它更加具体,以语言Y你正在使用。
把你的评论发给@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可以是任何合理的数字。
这就像how PHP encodes its error levels。请注意大部分级别是如何用2的幂来表示的(二进制只有一个'1'数字)。
我们在这些水平上使用|
来获得n个布尔值的综合结果。 int total
中的每个位代表其中一个条件。
由于n个布尔值有2^n个可能的组合结果,因此我们可以将每个结果与n位中的整数进行匹配。我们无法切换n个布尔值,但幸运的是,我们可以在此整数total
上使用switch
,它代表n个布尔值。
不幸的是,switch
上的多个变量在Java中是不可能的。除了位掩码@irrelephant建议,可以尝试重新思考你的评价:
我不完全熟悉二十一点,但我相信,而不是设置player.busted
和类似领域,你可以只设置玩家的得分-1
(或者,如果获得30分比25分更差,则可以将其设置为-score
),然后简单比较分数。
P.S.取而代之的
if (player.bust == false && dealer.bust == true)
你可以只输入
if (!player.bust && dealer.bust)
这样可以节省相当多的打字和很多更具可读性。
这是java。例如: 如果(player.bust ==假&& dealer.bust ==真){ 玩家获胜} 否则,如果(player.bust ==真&& dealer.bust ==真){} 等等等 – Bl33s