决策表或if-else语句

时间:2013-10-09 09:28:30

标签: java if-statement

我需要知道是否更好地制作决策表或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值或左手值进行绘图 以下。

3 个答案:

答案 0 :(得分:2)

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

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

基本原理是手动遍历每个if子句会导致线性过头,对于决策表,访问将是常量时间

practice 中,只要案例数量变得很大,每个体面的编译器都会将已经优化放入决策表/哈希表中,这是无关紧要的。< / p>

Following会有所帮助。请注意,选择开关或决策表或者是否还取决于测试条款的结构。 Switch仅适用于整数值。如果您无法将您的测试条件与随机访问的某些方法联系起来,您可能没有其他选择,只能使用if-else。

答案 1 :(得分:1)

选择最易读且易于维护的解决方案。在实际演示性能问题之前,不要担心优化。

答案 2 :(得分:1)

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

在某种程度上是正确的但不是真的。

根据你的描述,有很多不同目的的规则。无论您是在撰写决策表还是手工制作if-else,您仍然需要根据其使用和上下文正确组织规则,并将“业务流”分开以利用这些规则。

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

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

相关问题