设计算法时如何避免嵌套IF条件

时间:2014-10-23 00:58:28

标签: performance algorithm

对于具有多个IF条件的算法,我有以下伪代码。如何通过一些检查或更有效的方式避免这种嵌套。

  

如果(没有房子)那么

     

if(road == 1)然后做点什么

     

if(road == 2)然后做点什么

     

if(road == 3)然后做点什么

     

如果结束则结束如果结束则结束

     

如果(道路== 4)AND(有房子),那么如果

那就结束

1 个答案:

答案 0 :(得分:1)

我可能更关心可读性而不是效率,除非你已经分析了你的代码并发现它是一个瓶颈。

为了便于阅读,您可以使用实现公共接口的类数组。在伪代码中,给定此接口:

interface Callback
{
    void DoJob()
}

以及实现该接口的各种类:

class DoThing1 implements Callback { public void DoJob() { .. } }
class DoThing2 implements Callback { public void DoJob() { .. } }

然后在你的主代码中有一个这些回调的数组:

Callback m_roadHandlers[MAX_HANDLERS]

然后像这样打电话给他们:

if (house and road == 4)
    m_roadHandlers[road].DoJob();
else if (no house and road >= 1 and road <= 3)
    m_roadHandlers[road].DoJob();

你标记了Java,所以我把它说明如上,因为Java(还)没有方法回调的概念,所以据我所知你不能传入一个方法(因为我使用Java已经有一段时间了) ),所以你可能必须将类传递给回调。在C#中,您可以使用委托并在同一个类中传入方法。