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

Performance 算法设计中如何避免嵌套IF条件,performance,algorithm,Performance,Algorithm,对于具有多个IF条件的算法,我有以下伪代码。如何通过一些检查或更有效的方法避免这种嵌套 如果(没有房子)那么 如果(road==1),那么做点什么 如果(road==2),那么做点什么 如果(road==3),那么做点什么 如果结束如果结束如果结束如果结束如果结束 如果(路==4)和(有一所房子),那么做一些事情,如果 我可能更关心可读性而不是效率,除非您分析了代码并发现它是一个瓶颈 为了可读性,可以使用实现公共接口的类数组。在伪代码中,给定此接口: interface Callback {

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

如果(没有房子)那么

如果(road==1),那么做点什么

如果(road==2),那么做点什么

如果(road==3),那么做点什么

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

如果(路==4)和(有一所房子),那么做一些事情,如果


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

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

interface Callback
{
    void DoJob()
}
class DoThing1 implements Callback { public void DoJob() { .. } }
class DoThing2 implements Callback { public void DoJob() { .. } }
以及实现该接口的各种类:

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();
if(房屋和道路==4)
m_roadHandlers[road].DoJob();

否则如果(无房屋和道路>=1和道路这在很大程度上取决于手头的任务。你考虑过开关语句吗?@rosscowar在这里竖起大拇指。首先要记住的是开关语句。在最后一种情况下,你在里面放了一个if来检查房屋是否存在。谢谢@Georgeco,很难缩小模棱两可的任务,但开关语句不存在“绿色程序员并不总是知道这一点,这对提高代码的可读性很有帮助。谢谢。我是这样改变的。请建议我。如果(没有房子),那么切换(道路){案例1:为案例1做点什么案例2:为案例2做点什么案例3:为案例3做点什么案例4:如果(有房子)然后对案例4 End IF}//close switch End IFIt不会像那样工作,因为您的整个switch语句都在
IF(!houseExists)
中,所以案例4永远无法计算为true。因此您需要
IF(!houseExists){switch(road){case 1://stuff;case 2://stuff;case 3://stuff}否则IF(houseExists&&road==4){//stuff for 4}
你的代码没有复制OP的功能。在你的
if(no house)
中,你只想在
road
等于1、2或3时发送。我更新了它。我只是试图概括和解释这个想法,但你是对的,它没有完全回答他最初的问题。