对于具有多个IF
条件的算法,我有以下伪代码。如何通过一些检查或更有效的方式避免这种嵌套。
如果(没有房子)那么
if(road == 1)然后做点什么
if(road == 2)然后做点什么
if(road == 3)然后做点什么
如果结束则结束如果结束则结束
如果(道路== 4)AND(有房子),那么如果
那就结束
答案 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#中,您可以使用委托并在同一个类中传入方法。