复习笔记9 if else 以及效率优化

来源:互联网 发布:淘宝怎么没有朋友代付 编辑:程序博客网 时间:2024/06/05 12:47
public class Test10{public static void main(String[] args){//if elseint x = 0;//当表达式x > 1为真时进入作用域1中//当表达式结果为假时进入作用域2中//作用域1 和 作用域2是不会并存的if(x > 1){// 1}else {// 2}//else if 可以有多个,表示第一层次的逻辑划分if(x > 1){// 1}else if(x < 1){// 2}else{// 3}//这个代码属于典型的垃圾代码,x > 2的话//一定会大于1if(x > 1){if(x > 2){// code}}//对于这个代码而言//x只有等于2或者大于2两种//多加一个x > 1只会让代码看起来难懂if(x > 1){if(x > 2){}else{}}//这段代码效率很低,实际上你把0-9的10个数//分两段//x > 1的情况有8种,也就是说第二个表达式//判断了8次,加上第一个的10次,总共18次//如果把两个表达式顺序调换下,你会发现//x < 4仅有4种,总共14次for (int i = 0; i < 10; i++)        {//错误if(i > 1 && i < 4){}//正确if(i < 4 && i > 1){}//正确if(i < 4){if(i > 1){}}        }//这个是上边这个的测试printTimes();System.out.println("===================================>");//对于这个代码,如果逻辑区是连续的,//这样写并不是好办法,额外的判断次数//会使效率低下if(x < 10){if(x > 7){}else if(x > 5 && x < 8){}else if(x > 3 && x < 6){}}//简单把逻辑区域划分一下,其实还是蛮简单的if(x < 10){if(x > 7){}else if(x > 5){}else if(x > 3){}}printTimes1();System.out.println("===================================>");}/*for (int i = 0; i < 2000000000; i++)    for (int j = 0; j < 1000; j++)        if (j > 0 && j < 100)  times=4501377 ns        if (j < 100 && j > 0)  times=3312574 ns */public static void printTimes(){int y = 2;long nano = 0l;System.out.println("for (int i = 0; i < 2000000000; i++)");System.out.println("    for (int j = 0; j < 1000; j++)");nano = System.nanoTime();for (int j = 0; j < 2000000000; j++)        {for (int i = 0; i < 1000; i++){                    if(j > 0 && j < 100)            {            y = 5 / 3;            }            }        }nano = System.nanoTime() - nano;System.out.println("        if (j > 0 && j < 100)  times=" + nano + " ns");nano = System.nanoTime();for (int j = 0; j < 2000000000; j++)        {for (int i = 0; i < 1000; i++){                    if(j < 100 && j > 0)            {            y = 5 / 3;            }            }        }nano = System.nanoTime() - nano;System.out.println("        if (j < 100 && j > 0)  times=" + nano + " ns");}/*for (int i = 0; i < 2000000; i++)    for (int j = 0; j < 10; j++)        if(y > 7 && y < 10)        else if(y > 5 && y < 8)        else if(y > 3 && y < 6)  times=29993107 ns        if(y < 10)            if(y > 7)            else if(y > 5)            else if(y > 3)       times=21235980 ns */public static void printTimes1(){int y = 0;long nano = 0l;System.out.println("for (int i = 0; i < 2000000; i++)");System.out.println("    for (int j = 0; j < 10; j++)");nano = System.nanoTime();for (int j = 0; j < 2000000; j++)        {for (int i = 0; i < 10; i++){if(y > 7 && y < 10){y = 5 * 0;}else if(y > 5 && y < 8){y = 5 * 0;}else if(y > 3 && y < 6){y = 5 * 0;}            }        }nano = System.nanoTime() - nano;System.out.println("        if(x > 7 && x < 10)");System.out.println("        else if(x > 5 && x < 8)");System.out.println("        else if(x > 3 && x < 6)      times=" + nano + " ns");System.out.println();nano = System.nanoTime();for (int j = 0; j < 2000000; j++)        {for (int i = 0; i < 10; i++){        if(y < 10){if(y > 7){y = 5 * 0;}else if(y > 5){y = 5 * 0;}else if(y > 3){y = 5 * 0;}}            }        }nano = System.nanoTime() - nano;System.out.println("        if(x < 10)");System.out.println("            if(x > 7)");System.out.println("            else if(x > 5)");System.out.println("            else if(x > 3)           times=" + nano + " ns");}}

原创粉丝点击