首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件条件为

条件条件为
EN

Stack Overflow用户
提问于 2016-04-17 20:52:03
回答 1查看 53关注 0票数 0

您好,如何使if语句更有效?基本上我想做的是检查扑克中的“手”是否“直”我想检查玩家是否有“直”,“同花顺”和以上。例如:如果游戏手牌是同花顺的,我不需要检查是否笔直,只需检查“同花顺”及以上即可。

代码语言:javascript
复制
public enum HandType
{
    Single = 1,
    Pair = 2,
    Triple = 3,
    Straight = 4,
    Flush = 5,
    FullHouse = 6,
    FourOfAKind = 7,
    StraightFlush = 8,
}

public List<CardData> GetBotHands(List<CardData> gameHand)
{
    List<CardData> playerHand = new List<CardData>();

    HandType handType = HandEvaluator.EvaluateHand(gameHand);

    if(handType < HandType.Straight)
    {
        return null;
    }

    if(handType == HandType.Straight)
    {
        playerHand = GetStraight(gameHand);
        if(playerHand != null)
        {
            return playerHand;
        }

        playerHand = GetFlush(gameHand);
        if (playerHand != null)
        {
            return playerHand;
        }

        playerHand = GetFullHouse(gameHand);
        if (playerHand != null)
        {
            return playerHand;
        }

        playerHand = GetFourKind(gameHand);
        if (playerHand != null)
        {
            return playerHand;
        }

        playerHand = GetStraightFlush(gameHand);
        if (playerHand != null)
        {
            return playerHand;
        }
    }
    else if(handType == HandType.Flush)
    {
        playerHand = GetFlush(gameHand);
        if (playerHand != null)
        {
            return playerHand;
        }

        playerHand = GetFullHouse(gameHand);
        if (playerHand != null)
        {
            return playerHand;
        }

        playerHand = GetFourKind(gameHand);
        if (playerHand != null)
        {
            return playerHand;
        }

        playerHand = GetStraightFlush(gameHand);
        if (playerHand != null)
        {
            return playerHand;
        }
    }
    else if(handType == HandType.FullHouse)
    ...

    return null;
}

通过遵循@Shiran Dror的解决方案,现在我有了以下代码。但是有没有办法让它变得更短呢?

代码语言:javascript
复制
if(handType == HandType.Straight)
{
    return GetStraight(gameHand) ?? GetFlush(gameHand) ?? GetFullHouse(gameHand) ?? GetFourKind(gameHand) ?? GetStraightFlush(gameHand);
}
else if(handType == HandType.Flush)
{
    return GetFlush(gameHand) ?? GetFullHouse(gameHand) ?? GetFourKind(gameHand) ?? GetStraightFlush(gameHand);
}
else if(handType == HandType.FullHouse)
...
EN

回答 1

Stack Overflow用户

发布于 2016-04-17 20:56:58

你可以使用??如下所示:

代码语言:javascript
复制
return GetStraight(gameHand) ?? GetFlush(gameHand) ... ?? GetStraightFlush(gameHand);

它将返回第一个none空值

编辑-让它更短

代码语言:javascript
复制
switch (handType) {
  case HandType.Straight:
    return GetStraight(gameHand) ?? GetFlush(gameHand) ... ?? GetStraightFlush(gameHand);

  case HandType.Flush:
    return GetStraight(gameHand) ?? GetFlush(gameHand) ... ?? GetStraightFlush(gameHand);
...
  default: 
    return null;
}

此外,如果您一次又一次地调用同一个函数,您可以添加一个新函数,这样就不会重复代码。示例:

代码语言:javascript
复制
private HandType RepetitiveCheck(gameHand) 
{
  return GetFlush(gameHand) ?? GetFullHouse(gameHand) ?? GetFourKind(gameHand) ?? GetStraightFlush(gameHand)
}

在main函数中,像这样使用它

代码语言:javascript
复制
switch (handType) {
  case HandType.Straight:
    return GetStraight(gameHand) ?? RepetitiveCheck(gameHand);

  case HandType.Flush:
    return RepetitiveCheck(gameHand);
...
  default: 
    return null;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36676749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档