3.循环语句

一. 循环语句分类

while,do while,for

二. while

image
格式:


while(boolean表达式){
循环体
}

新建WhileDemo.java

//whlie的Demo
class  WhileDemo
{
	public static void main(String[] args) 
	{
		//打印500次
		int i = 0;
		while (i < 500)
		{
			//System.out.println("帅哥");
			i ++;
		}
		
		//打印1-100
		i = 1;
		while (i <= 100)
		{
			System.out.println(i);
			i ++;
		}

		//计算1-100的整数和
		i = 1;
		int count = 0;
		while (i <= 100)
		{
			count += i;
			i ++;
		}
		System.out.println("count =" + count);
	}
}

三. do while

先执行一次循环体,再进行判断

do{
循环体
}while(boolean表达式);
新建DoWhileDemo.java
//do while的Demo
class DoWhileDemo 
{
	public static void main(String[] args) 
	{
		//打印帅哥100次
		int i = 0;
		do{
			//System.out.println("帅哥");
			i ++;
		}while(i < 100);
		
		//打印1-100整数
		i = 1;
		do
		{
			System.out.println(i);
			i ++;
		}
		while (i <= 100);

		//计算1-100整数的和
		i = 1;
		int count = 0;
		do
		{
			count += i;
			i ++;
		}
		while (i <= 100);
		System.out.println(count);

	}
}

四. for

image

for(初始化语句;boolean表达式;循环后操作语句){
循环体语句;
}
  • 初始化语句:表达式对循环初始化,只在循环开始时执行一次。
  • boolean表达式:表达式为false时,循环终止。
  • 循环后操作语句:循环每次迭代之后会调用该语句,一般该语句都是执行递增或递减。

新建ForDemo.java

//for循环
class ForDemo 
{
	public static void main(String[] args) 
	{
		//打印100次帅哥
		for (int i = 0;i < 100;i ++ )//这样定义作用域为for当中
		{
			//System.out.println("帅哥");
		}

		//打印1-100整数
		for (int i = 1;i <= 100 ;i ++ )
		{
			//System.out.println(i);
		}

		//计算1-100之间的整数
		int count = 0;
		for (int i = 1;i <= 100 ;i ++ )
		{
			count += i;			
		}
		System.out.println(count);
		
	}
}
  • 三大循环,for循环要方便,for性能更高。
  • 原因:变量定义在for循环里面,循环执行完毕后,释放该变量的存储空间。

五. 嵌套循环

新建LoopInLoopDemo.java

//嵌套循环
class LoopInLoopDemo 
{
	public static void main(String[] args) 
	{
		for (int i = 1;i <= 4 ;i ++ )
		{
			for (int j = 1;j <= 100 ;j ++ )
			{				
				System.out.println(j);
			}			
			System.out.println("---------");
		}
	}
}

六. 嵌套循环的性能优化

  1. 案例描述
    某日,在JavaEye上看到一道面试题,题目是这样的:

    请对以下的代码进行优化

   for (int i = 0; i < 1000; i++)  
       for (int j = 0; j < 100; j++)  
           for (int k = 0; k < 10; k++)  
               testFunction (i, j, k);  
  1. 案例分析
    从上述代码案例可以看出,不论如何优化,testFunction()执行的次数都是相同的,该部分是不存在优化的可能。那么优化只能从循环变量i,j,k的实例化、初始化、比较、自增等耗时方面来进行分析。首先,分析原题代码循环变量在以上方面的耗时情况:
变量实例化(次数)初始化(次数)比较(次数)自增(次数)
i1110001000
j100010001000*1001000*100
k1000*1001000*1001000 * 100*101000 * 100*10

目的:该代码性能优化就是要尽可能地减少循环变量i、j、k的实例化、初始化、比较、自增的次数,同时不引起其他可能的耗时运算。

  1. 解决过程
  • 优化方案①:
   for (int i = 0; i < 10; i++)  
       for (int j = 0; j < 100; j++)  
           for (int k = 0; k < 1000; k++)  
               testFunction (k, j, i);  

该方案主要是将循环次数少的放在外面,循环次数多的放在里层,这样可以最大程度地减少相关循环变量的实例化次数、初始化次数等,方案耗时情况如下:

变量实例化(次数)初始化(次数)比较(次数)自增(次数)
i111010
j101010*10010*100
k10*100010*10010 * 100*100010 * 100*1000
  • 优化方案②:
   int i, j, k;  
   for (i = 0; i < 10; i++)  
       for (j = 0; j < 100; j++)  
           for (k = 0; k < 1000; k++)  
               testFunction (k, j, i);  

该方案主要是在方案①的基础上,将循环变量的实例化放在循环外,这样可以进一步减少实例化次数,耗时情况如下表:

变量实例化(次数)初始化(次数)比较(次数)自增(次数)
i111010
j11010*10010*100
k110*10010 * 100*100010 * 100*1000

注:方案②的优势体现在若将i、j、k的数值提高更多的,其提升的效果才更明显。

七. 打印一个矩形

//打印一个矩形
class RectangleDemo 
{
	public static void main(String[] args) 
	{
		for(int i = 0;i < 4;i ++){
			for (int j = 0;j < 6 ;j ++ )
			{
				System.out.print("*");
			}
			System.out.println("");//换行
		}
		
	}
}

八. 打印三角形

新建TriangleDemo.java


//输出三角形
class TriangleDemo 
{
	public static void main(String[] args) 
	{
		for (int i = 1;i < 9;i ++ )
		{
			for (int j = 0;j < i ;j ++ )
			{				
				System.out.print("*");
			}			
			System.out.println("");
		}
	}
}

九. 九九乘法表

//99乘法表
class Table99Demo 
{
	public static void main(String[] args) 
	{
		//第一行
		//第二行
		//第三行
		for (int i = 1;i <= 9 ;i ++ )
		{
			for (int j = 1;j <= i ;j ++ )
			{
				System.out.print(j + " * " + i + " = " + ( j * i) + "\t");
			}
			System.out.println("");
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值