【问题标题】:Alternate use of switch function交替使用开关功能
【发布时间】:2012-12-11 05:31:33
【问题描述】:

我正在编写一个程序来模拟二十一点游戏,并且我一直在使用 switch 来浏览菜单。它运行良好,但我想知道您是否可以扩展 switch 以涉及多个案例。例如,每个玩家都有很多结果。例如,二十一点、二十一点与二十一点、玩家破产和庄家不破产、庄家破产但玩家不破产、玩家和庄家破产、双倍下注和破产等。有没有办法在这里使用 switch 比较多个变量,还是我必须将 if/else-if 与多个条件叠加?

【问题讨论】:

    标签: java switch-statement blackjack


    【解决方案1】:

    离开你对@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 &lt;&lt; x 是 2^x,| 是按位或。我的例子是 n = 2,但 n 可以是任何合理的数字。

    这类似于how PHP encodes its error levels。请注意大多数级别是如何用 2 的幂表示的(二进制中只有一个“1”数字)。

    我们在这些级别上使用| 来获得 n 个布尔值的组合结果。 int total 中的每一位代表其中一个条件。

    由于 n 个布尔值有 2^n 种可能的组合结果,我们可以将每个结果与 n 位的整数相匹配。我们不能打开 n 个布尔值,但幸运的是,我们可以在这个表示 n 个布尔值的整数 total 上使用 switch

    【讨论】:

      【解决方案2】:

      不幸的是,switch 在 Java 中是不可能的。除了@irrelephant 建议的位掩码,您可以尝试重新考虑您的评估:

      我对二十一点并不完全熟悉,但我相信您可以将玩家的分数设置为-1(或者,如果获得 30 的分数比25,您可以将其设置为-score),然后简单地比较分数。


      附:而不是

      if (player.bust == false && dealer.bust == true)
      

      你可以输入

      if (!player.bust && dealer.bust)
      

      它节省了相当多的打字时间并且更具可读性。

      【讨论】:

        【解决方案3】:

        我不确定你在说什么语言,因为你没有指定它,但在 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
        

        您的问题非常模糊,我认为您应该考虑使其更具体地针对您使用的语言。

        【讨论】:

        • 这是java。例如: if(player.bust == false && Dealer.bust == true){ player wins} else if(player.bust == true && Dealer.bust == true){ } 等等。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多