交替使用开关功能

问题描述:

我正在编写程序来模拟二十一点游戏,我一直在使用开关来浏览菜单。它一直很好地工作,但我想知道是否可以扩展交换机以涉及多个案例。例如,每个玩家都有很多成果。例如,二十一点,二十一点与二十一点,玩家胸围&经销商不破产,经销商破产但玩家不破产,玩家和经销商破产,双倍下跌和破产等。有没有一种方法可以在这里使用开关比较多个变量,还是我必须堆栈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你正在使用。

+0

这是java。例如: 如果(player.bust ==假&& dealer.bust ==真){ 玩家获胜} 否则,如果(player.bust ==真&& dealer.bust ==真){} 等等等 – Bl33s

把你的评论发给@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) 

这样可以节省相当多的打字和很多更具可读性。