【问题标题】:Decision Table or if-else statement决策表或 if-else 语句
【发布时间】:2017-05-12 00:50:55
【问题描述】:

我需要知道制作决策表或 if-else 语句是否更适合我。如果决策表更适合以下规则,请告诉我我需要制作的基本代码是什么。我尝试过使用 if-else 语句来制作它,但输出不是我想要的。本题为百家乐游戏,规则如下:

  • 首先,如果任一玩家的手牌为 8 或 9,称为“自然”,则游戏结束且没有第三张牌 曾经画过
  • 其次,如果没有自然牌,玩家会收到第三张牌(“平局”或“击中”),否则 (“拍拍”),根据以下规则: - 玩家必须抽一张手牌值小于或等于5的牌,并以6或更多的手拍。 -第三,如果没有自然,庄家根据以下规则进行抽牌或站拍 - 如果玩家没有抽牌,则庄家遵循与玩家相同的规则:庄家 必须抽一张5或更少手牌,6或更多手拍。

  • -如果玩家确实抓到了第三张牌,则决定仅基于该牌的价值(称为 C3),以及 经销商的手。庄家必须抽一张手牌少的牌 大于或等于某个极限 L,其中 L 的计算方法如下:

  • 如果 C3 大于或等于 8,则令 Y = C3-10,否则令 Y = C3。所以 Y 将来自 -2 到 7。

  • o 要获得 L,将 Y 除以 2,截断结果,然后加 3。L 将是 从 2 到 6。 o 庄家必须用 L 或
    少。

【问题讨论】:

  • 选择最易读的一个。
  • 对我来说,我认为餐桌会更好。但我不知道如何形成一张桌子。至少我认为我的教授还没有教过我们。但我想学着做。课前学习新知识没有坏处

标签: java if-statement


【解决方案1】:

原则中,一旦 if-else-if 子句达到 5 或更多(只是一个足以影响平均访问时间的值)实例。

更新: 5 没有写在任何地方。我用它来说明一个概念,虽然我记得在 switch case 为 8 或更多时看到一些编译器这样做,但那是很久以前的事了

理由是手动遍历每个 if 子句会导致线性开销,而对于决策表,访问将是恒定时间

实践中,一旦案例数量变得重要,您的代码已经被每个体面的编译器优化到决策表/哈希表中,因此这无关紧要。

Following 会有所帮助。请注意,switch 或决策表或 if else 的选择还取决于您的测试子句的结构。 Switch 仅适用于整数值。如果您无法将测试条件以某种方式随机访问,您可能别无选择,只能使用 if-else。

【讨论】:

  • 嘿,谢谢。那么这是否意味着我最好使用 if-else 语句,或者它取决于我的整体代码?抱歉,我是 Java 新手,我正在尝试掌握它.. 非常感谢
  • 没问题。如果可以,请使用 Switch 或决策表。但是在 if-else-if 的情况下,直到有五个或更多的顺序检查才重要。编写代码时最好尽量避免编译器优化带来的意外
  • 这个数字 5 是从哪里来的?
  • 顺序检查是什么意思。抱歉不太明白。如果我想制作一张桌子。我该怎么办...
  • 通过顺序检查,我的意思是它必须遍历 if-else 的每个子句,直到达到每个条件的正确子句。 @BrianAgnew,5 只是试图给出“至少足够的条款”的概念并没有意义
【解决方案2】:

选择最具可读性和可维护性的解决方案。在您可以实际展示性能问题之前,不要担心优化。

【讨论】:

  • 对我来说,因为百家乐有很多规则,所以听起来桌子更好、更易读。而我最后写的 if-else 语句只会让我自己感到困惑。你能教我怎么做一张桌子吗……谢谢!会很感激它
【解决方案3】:

从您的 cmets 中,您提到使用决策表更好,因为有很多规则。

在一定程度上是对的,但不是真的。

根据您的描述,有很多不同目的的规则。无论您是编写决策表还是手工制作 if-else,您仍然需要根据其用法和上下文适当地组织规则,并分离“业务流程”以使用这些规则。

如果你不这样做,使用决策表就更难编码,也更难阅读。

当您考虑使用决策表时,这意味着您要使用规则引擎,可读性可能不是最重要的因素。使用规则引擎的主要原因是为了方便将来更改规则。如果您没有预见到这种需求,我强烈建议您使用结构合理的代码“手工制作”逻辑。

【讨论】:

    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 2019-04-09
    • 2022-07-05
    • 2014-12-03
    • 2017-02-05
    • 2017-07-03
    • 2022-12-07
    • 1970-01-01
    相关资源
    最近更新 更多