java循环结构

一、引言


1.1 生活中的循环

|                                || :----------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z51OzpN5-1629814283219)(Pictures\生活中的循环.PNG)] |

在单圈400米的跑道上完成10000米长跑,当跑完25圈时,满足条件,循环结束。

二、循环的概念


2.1 程序中的循环

概念:通过某个条件,重复的执行一段逻辑代码。

|                              || :--------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fVORqlyH-1629814283220)(Pictures\程序中循环.PNG)] |

三、while循环


3.1 while循环

语法:
while(布尔表达式){
//逻辑代码(循环操作)
}

执行流程:

  • 先对布尔表达式进行判断,结果为true,则执行逻辑代码。
  • 本次执行完毕后,再次进行判断,结果仍旧为true,则再次执行逻辑代码。
  • 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。
3.2 循环的组成

需求:打印100遍“HelloWorld”。

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dVjd0k4P-1629814283222)(Pictures\循环组成.PNG)] |

注意:循环有四部分组成。

3.3 初始与迭代

以下代码,哪一行是初始部分?哪一行是迭代部分?

|                              || :--------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MCZ3KPq3-1629814283223)(Pictures\初始与迭代.PNG)] |

3.4 while的特点

|                               || :---------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yeSOmRb0-1629814283224)(Pictures\while的特点.PNG)] |

特点:首次即有入口条件,先判断、再执行,适用于循环次数明确的情况。

public class TestWhile{
	
	public static void main(String[] args){
		
		//打印100遍HelloWorld
		
		int i = 1;
		
		while( i <= 10 ){
			System.out.println("HelloWorld");
			i++;
		}
		
		System.out.println("程序结束...");
		
	}
}
3.5 课堂案例

计算 1 + 2 + 3 + 4 + 5 … + 98 + 99 + 100 的总和。

public class TestGetSum{
	
	public static void main(String[] args){
		
		//求1~100之间所有数字的总和
		
		
		//1.循环100次的问题
		
		//2.循环的过程中进行求和
		
		
		int i = 1;//初始部分
		
		int sum = 0;
		
		while(i <= 100){//循环条件
			
			sum = sum + i;//循环操作
			
			i++;//迭代部分
		}
		
		System.out.println("总和为:" + sum);
		
		System.out.println("程序结束...");
	}
}

计算 1 ~ 100 之间,所有偶数的和。

public class TestGetSum2{
	
	public static void main(String[] args){
		
		//求1~100之间所有偶数的和
		
		
		//方案一:获取所有的偶数,相加求和
		
		
		//方案二:依旧获取1~100之间的每一个数字,进行偶数的判断,满足条件之后,相加求和
		
		int i = 1;
		
		int sum = 0;
		
		while( i <= 100 ){
			
			if( i % 2 != 0 ){//判断偶数
				//求和
				sum = sum + i;
			}

			i++;
		}
		
		System.out.println("偶数的和:" + sum);
		
		
	}
}

四、do while循环


4.1 do while循环

语法:
do{
逻辑代码(循环操作)
}while(布尔表达式);

执行流程:

  • 先执行一次循环操作之后,再进行布尔表达式的判断。
  • 如果结果为true,则再次执行循环操作。
  • 如果结果为false,才会退出循环结构,执行后续代码。
public class TestDoWhile{
	
	public static void main(String[] args){
		
		//打印100遍“HelloWorld”
		
		int i = 1;
		
		do{
			System.out.println("HelloWorld" + i);
			i++;
		}while( i <= 100);
		
		System.out.println("程序结束...");
		
	}
}
4.2 do while的应用场景

需求:检查学生作业完成情况,输入教师评语,决定学生是否需要抄写代码。

|                                   || :-------------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r6EUSRZk-1629814283225)(Pictures\dowhile应用场景.PNG)] |

应用场景:适用于循环次数不明确的情况。

import java.util.Scanner;

public class TestDoWhile2{
	
	public static void main(String[] args){
		
		Scanner input = new Scanner(System.in);
		
		//循环操作:学生抄写代码、教师输入评语
		
		char answer = 'y';//赋予初始值
		
		do{
			System.out.println("抄写一遍...");
			
			System.out.println("请教师输入评语:");
			
			answer = input.next().charAt(0);//控制台获取'y'或者'n'
		}while( answer != 'y' );
		
		System.out.println("程序结束...");
		
	}
}

五、for循环


5.1 for循环

语法:
for(初始部分 ; 循环条件 ; 迭代部分){
//循环操作
}

执行流程:

  • 首次执行初始部分(仅一次)。
  • 对布尔表达式进行判断,结果为true,则执行逻辑代码。
  • 本次执行完毕后,执行迭代部分,再次判断,结果仍旧为true,则再次执行逻辑代码。
  • 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。
5.2 for的特点

需求:打印100遍“HelloWorld”。

|                               || :---------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xeRLi9V3-1629814283225)(Pictures\for循环特点.PNG)] |

特点:首次即有入口条件,先判断、再执行,适用于循环次数明确的情况。

public class TestFor{
	
	public static void main(String[] args){
		
		//打印100遍HelloWorld
		
		
		//		初始		条件		迭代
		for(int i = 1 ; i <= 100 ; i++){
			System.out.println("HelloWorld" + i);//操作
		}
		
		
	}
}
5.3 课堂案例

控制台输入整数n,计算n的阶乘(!n)。例:1 * 2 * 3 … * n

import java.util.Scanner;

public class TestFor2{
	
	public static void main(String[] args){
		//阶乘  例如:6的阶乘  1*2*3*4*5*6
		
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入一个需要计算阶乘的值:");
		
		int target = input.nextInt(); //接收一个目标值,计算该值的阶乘
		
		long sum = 1; //注意:int类型的sum,最大计算到12的阶乘,如果计算13的阶乘,积会超过int的取值,不精确。
		
		for(int i = 1; i <= target; i++){
			
			//相乘求积
			sum = sum * i;
		}
		
		System.out.println("阶乘的积为:" + sum);
	}
}

现有1个班级的5名同学,请通过控制台输入5名同学的分数,并计算平均分。

import java.util.Scanner;

public class TestFor3{
	
	public static void main(String[] args){
		
		Scanner input = new Scanner(System.in);
		
		//计算5位同学的平均分

		
		double sum = 0.0;//总和
		
		for(int i = 1; i <= 5; i++){
			
			//1.循环控制台录入分数
			System.out.println("请输入第" + i + "位同学的成绩:");
			
			double score = input.nextDouble();
			
			//2.累加总和
			sum = sum + score;
			
		}
		
		double avg = sum / 5;
		
		System.out.println("平均分:" + avg);
		
	}
}

六、流程控制关键字


6.1 流程控制break

break:终止、跳出switch、循环结构。

|                                 || :-----------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v8UpYl59-1629814283226)(Pictures\流程控制break.PNG)] |

import java.util.Scanner;public class TestBreak{		public static void main(String[] args){		Scanner input = new Scanner(System.in);				//控制台录入5位同学成绩,如果有任何一位同学的成绩产生非法数据(不满足0~100之间的数字)时,将直接退出整合循环操作		double sum = 0.0;				boolean flag = true;//合法				for(int i = 1; i <= 5; i++){			System.out.println("请输入第" + i + "位同学的成绩:");						double score = input.nextDouble();			if(score < 0 || score > 100.0){				flag = false;//非法数据				break;			}						sum = sum + score;					}				if( flag == true ){ //根据flag标记决定是否需要计算和输出平均分			double avg = sum / 5;					System.out.println("平均分:" + avg);		}else{			System.out.println("非法数据,请重新运行程序计算平均分");		}							}}
6.2 流程控制continue

continue:结束本次、进入下一次循环。

|                                    || ---------------------------------- || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EPcxz3lm-1629814283227)(Pictures\循环控制continue.PNG)] |

import java.util.Scanner;

public class TestContinue{
	
	public static void main(String[] args){
		
		Scanner input = new Scanner(System.in);
		
	//控制台录入5位同学成绩,如果有任何一位同学的成绩产生非法数据(不满足0~100之间的数字)时,结束本次的统计,进入下一次循环当中

		double sum = 0.0;
		
		for(int i = 1; i <= 5; ){
			System.out.println("请输入第" + i + "位同学的成绩:");
			
			double score = input.nextDouble();
			
			if(score < 0 || score >100.0){
				//非法数据
				continue;
			}
			
			sum = sum + score;
			
			i++;
		}
		
		double avg = sum / 5;
		
		System.out.println("平均分:" + avg);
	}
}

七、嵌套循环


7.1 嵌套循环

概念:在一个完整的循环结构中,嵌套另一个完整的循环结构。

需求:打印3行5颗星。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sfh6pvYw-1629814283227)(Pictures\嵌套循环.PNG)]
public class TestNestedFor{
	
	public static void main(String[] args){
		
		/*
		
		*****
		*****
		*****
		
		*/
		
		//不采用此种方式
		//System.out.println("*****");
		
		
		//冗余(重复)代码,避免重复,采取复用代码的形式
		
		
		
		
		//将内部的代码,重复3次
		for(int i = 1 ; i <= 3 ; i++){// i = 4
			
			//在1行中打印5颗星
			for(int j = 1 ; j <= 5 ; j++){//
				System.out.print("*");
			}
			System.out.println();
			
		}
		//程序流程到达此处
		
		/*
		
		*****
		*****
		*****
		
		
		*/
		
	}
}

需求:计算3个班,每个班5名同学的平均成绩。

|                             || :-------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DyVSwJXY-1629814283228)(Pictures\嵌套循环2.PNG)] |

import java.util.Scanner;

public class TestNestedFor2{
	
	public static void main(String[] args){
		
		Scanner input = new Scanner(System.in);
	
		for(int k = 1 ; k <= 3 ; k++){
			
			System.out.println("---第"+k+"个班---");
			
			//求一个班,5位同学的平均成绩
			double sum = 0.0;
			
			for(int i = 1 ; i <= 5 ; i++){
				
				System.out.println("请输入第" + i +"位同学的成绩:");
				
				double score = input.nextDouble();
				
				sum += score;
				
			}
			
			double avg = sum / 5;
			
			System.out.println("第" + k + "班5位同学的平均分:" + avg);
			
		}
		
	}
}
7.2 课堂案例

打印直角三角形。

public class TestNestedFor3{
	
	public static void main(String[] args){
		
		//打印直角三角形
		
		/*
		
		*			j <= 1
		**			j <= 2
		***		j <= 3
		****		j <= 4
		*****		j <= 5
		
		-----------------------
		
		*
		**
		***
		****
		*****
		
		*/
		
		//外层控制行数
		for(int i = 1 ; i <= 5 ; i++){ // i = 6
			
			//内层控制列数
			for(int j = 1 ; j <= i ; j++){ //
				System.out.print("*");
			}
			System.out.println();
			
		}
		
		System.out.println("程序结束");
		
	}
}

打印等腰三角形。

public class TestNestedFor4{
	
	public static void main(String[] args){
		
		//打印等腰三角形
	
		//	####*
		//	###***
		//	##*****
		//	#*******
		//	*********
		
		int rows = 5;
		
		//1.打印倒的直角三角形
		for(int i = 1 ; i <= rows ; i++){ //外层打印5行
		
			//打印4行的直角三角形
			for(int j = rows - 1 ; j >= i ; j--){ // j = 4 ; j >= 1
				//被满足4次
				System.out.print("#");
			}
		
			System.out.println();
		}
		
		//2.打印正的直角三角形(每次递进数值上 *2-1 )
		//	*
		//	***
		//	*****
		//	*******
		//	*********
		
		for(int i = 1 ; i <= rows ; i++){ // i = 1
			
			for(int j = 1 ; j <= i*2-1 ; j++){
				System.out.print("*");
			}
			
			System.out.println();
		}
		
		
		//整合
		
		//	####*
		//	###***
		//	##*****
		//	#*******
		//	*********
		
		
		for(int i = 1 ; i <= rows ; i++){ // i = 2
			
			
			for(int j = rows - 1 ; j >= i ; j--){ // j = 4 ;  4 >= 2
				System.out.print(" ");
			}
			
			//程序当前的执行流程位置
			for(int j = 1 ; j <= i*2-1 ; j++){ // j = 1 ; j <= 3
				System.out.print("*");
			}
			
			System.out.println();
		}

	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值