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");
}
}
复习笔记9 if else 以及效率优化
最新推荐文章于 2024-01-10 17:56:46 发布