首页 新闻 会员 周边

条件语句对程序效率的影响问题

0
[待解决问题]

如有以下例程:
        public int addTest(int a, int b, int c, int d)
        {
            int total = 0;

    /*

                对total的若干处理程序

           */

            if (a != 0) total += a;
            if (b != 0) total += b;
            if (c != 0) total += c;
            if (d != 0) total += d;

            return total;
        }
        public int addTwo(int aa, int bb)
        {
            return addTest(aa, bb, 0, 0);
        }
        public int addThree(int aaa, int bbb, int ccc)
        {
            return addTest(aaa, bbb, ccc, 0);
        }

原来我们可以分别写两个模块,一个加两个数字,一个加三个数字的,这样不用判断是否存在数值,而现在只写一个总的功能模块,然后通过条件判断是否存在数值再做加运算。通过重载调用总模块

我的问题是,如果条件判断增加到几十个if语句,那么会不会影响程序的执行效率。

如果分开处理,不同的模块又出现了相同的代码只是小部分代码不同。应该要如何来平衡执行效率、代码清晰和代码冗余的问题!?

kevinwang32的主页 kevinwang32 | 初学一级 | 园豆:123
提问于:2012-12-28 17:09
< >
分享
所有回答(7)
0

就算 a 等于0,加上0 也不会有影响

geass.. | 园豆:1821 (小虾三级) | 2012-12-28 17:33

这段程序只是我例举的一个例子,一个运行模式而已

支持(0) 反对(0) kevinwang32 | 园豆:123 (初学一级) | 2012-12-29 10:30
0

看不懂,为何要两数相加,三数相加,可以用数组、list作为源,然后循环加入,就像一开始学累加程序一样。

happydaily | 园豆:301 (菜鸟二级) | 2012-12-28 20:20

这段程序只是我例举的一个运行模式而已,实际问题并非如此简单,确实是要经过层层判断

支持(0) 反对(0) kevinwang32 | 园豆:123 (初学一级) | 2012-12-29 10:32
0

在这种情况下,使用switch跳转语句效率会高一些。if逐行判断,switch则通过break跳转。你输入一个参数比较多的,逐行调试比较下两者区别。

伏草惟存 | 园豆:1420 (小虾三级) | 2012-12-28 21:47

switch只能针对一个变量进行选择分支,而我的这段程序里是有若干个变量需要判断的。

支持(0) 反对(0) kevinwang32 | 园豆:123 (初学一级) | 2012-12-29 10:34
0

这种模型应该使用模板,如果只是判非0完全没必要,如果是其它数值就要看该代码的执行频率,如果不是热点完全没必要优化,如果是热点就要考虑cpu流水线问题。

startcool | 园豆:208 (菜鸟二级) | 2012-12-28 23:45

感谢你的回复,很有参考价值

支持(0) 反对(0) kevinwang32 | 园豆:123 (初学一级) | 2012-12-29 11:11
0

客观的讲,没有必要非得把两个模块的函数,改装到一个模块,如果你只是想单纯的提高一些执行效率。

代码的可读性,可扩展性,层次性,是好多个方面的。

实际中的函数本身执行,不会耽误很多时间,又不会出现一分钟几十万的访问量,去执行这个函数。

不要为了节省不到1分钟的执行效率,去降低代码的可扩展性,

增加日后,调试,扩展的工作量。

二十三号同学 | 园豆:974 (小虾三级) | 2012-12-29 00:46

但如果不整合到一个模块,出现太多的代码冗余又该怎么处理呢

支持(0) 反对(0) kevinwang32 | 园豆:123 (初学一级) | 2012-12-31 14:25
0

  if (a != 0) total += a;
            if (b != 0) total += b;
            if (c != 0) total += c;
            if (d != 0) total += d;

其实这个a,b,c,d就算是0,然后不判断,直接相加,又没有什么错误

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-29 11:14

唉,这个只是我例举的代码形式并不是实际代码。我是问如果N个模块,功能差不多,就是一小部分不同,整合到一个模块又会增加很多的判断语句。在这样的情况下,如何平衡,是要选择分布成N个模块而牺牲代码冗余加大程序的大小,还是选择整合到一起增加条件判断,牺牲程序的执行效率

支持(0) 反对(0) kevinwang32 | 园豆:123 (初学一级) | 2012-12-31 14:32
0

明白你的意思了。我觉得在实际的多写几个if判断是没有问题的,cpu判断是非的效率是很高的这里 一篇解决类似问题的博客,可能在你这里不适用,但是是一种思路。

jone_e | 园豆:1410 (小虾三级) | 2012-12-30 19:59

哈,有用,正好我也在做接口的东东

支持(0) 反对(0) kevinwang32 | 园豆:123 (初学一级) | 2012-12-31 14:45

@kevinwang32: 呵呵,那篇文章是我写的,可能写的有点儿简陋,不清楚的地方或者您有更好的方法,我们可以交流。

支持(0) 反对(0) jone_e | 园豆:1410 (小虾三级) | 2012-12-31 15:34

@jone_e:兄弟,怎么联系你呀

支持(0) 反对(0) kevinwang32 | 园豆:123 (初学一级) | 2012-12-31 16:58

@kevinwang32: 就在博客园。

支持(0) 反对(0) jone_e | 园豆:1410 (小虾三级) | 2013-01-01 14:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册