您的位置:首页 > 其它

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

2012-06-03 19:46 337 查看
public class Test10
{
public static void main(String[] args)
{
//if else
int 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的话
//一定会大于1
if(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");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: