4

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

4

3 回答 3

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 << x2^x,|是按位或。我的例子是 n = 2,但 n 可以是任何合理的数字。

这类似于PHP 如何对其错误级别进行编码。请注意大多数级别是如何用 2 的幂表示的(二进制中只有一个“1”数字)。

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

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

于 2012-12-25T12:45:03.963 回答
1

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

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


PS代替

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

你可以输入

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

它节省了很多打字并且更具可读性。

于 2012-12-25T13:25:17.133 回答
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

你的问题很模糊,我认为你应该考虑让它更具体到你使用的语言。

于 2012-12-25T03:17:57.227 回答