关于java:Decision Table或if-else语句

Decision Table or if-else statement

我需要知道做决策表对我来说是更好还是更好。如果决策表更适合下面的规则,请告诉我需要制定哪些基本代码。我尝试过使用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。我会从2到6。o经销商必须以L或更少。


原则上,您应该使用一个决策表/开关等(如果您担心通过案例的高效处理),一旦您的if-else if子句达到5个或更多(只是一个足以影响平均访问时间的值)实例。

更新:5不写在任何地方。我用它来说明一个概念,尽管我记得在切换案例为8个或更多的时候看到过一些编译器这样做,但那是很久以前的事了。

其基本原理是,手动浏览每一个if子句都会导致线性overhead,对于决策表,访问将是恒定的时间。

在实践中,每一个合适的编译器都已经将您的代码优化到决策表/哈希表中,因为一旦案例数量变得显著,这就无关紧要了。

跟随会有帮助。注意,选择开关或决策表,或者是否选择其他,也取决于测试子句的结构。开关仅对整数值有效。如果您不能将您的测试条件关联起来,以某种方式随机访问,那么您可能没有其他选择,只能在其他情况下使用。


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

这在一定程度上是正确的,但不是真的。

根据你所描述的,有很多不同目的的规则。无论您是在编写决策表还是手工艺品(如果有的话),您仍然需要根据规则的用法和上下文适当地组织规则,并分离"业务流"以使用这些规则。

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

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


选择最可读和可维护的解决方案。不要担心优化,除非你能真正证明一个性能问题。