复习笔记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");}}