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



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");
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值