首页 > 编程语言 >11、java程序流程控制之三:循环结构(while循环)、循环结构(do-while循环)、break 与 continue 关键字(经典案例)

11、java程序流程控制之三:循环结构(while循环)、循环结构(do-while循环)、break 与 continue 关键字(经典案例)

时间:2024-08-13 09:23:23浏览次数:12  
标签:11 int System while 循环 println out

java程序流程控制之三:

Ⅰ、循环结构:while 循环

1、while 循环结构:

其一、描述:



While 循环的使用

一、循环结构的4个要素
① 初始化条件
② 循环条件  --->是boolean类型
③ 循环体
④ 迭代条件


二、while循环的结构

①
while(②){
	③;
	④;
}

执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②


说明:
1.写while循环千万小心不要丢了迭代条件; 一旦丢了,就可能导致死循环!
2.我们写程序,要避免出现死循环;
3.for循环和while循环是可以相互转换的! 
  区别:for循环和while循环的初始化条件部分的作用范围不同(即:作用域不同);


算法:有限性(因为我们写的程序都可以称为算法,因此要遵循算法的有限性要求);


其二、代码为:



class  WhileTest{
	public static void main(String[] args) {
		
		//遍历100以内的所有偶数
		int i = 1;
		while(i <= 100){
			
			if(i % 2 == 0){
				System.out.println(i);
			}
			
			i++;
		}
		//出了while循环以后,仍可以调用。
		System.out.println(i);//101

	}
}


其三、截图为:

在这里插入图片描述

Ⅱ、循环结构:do-while 循环

1、do-while 循环结构:

其一、描述:



do-while循环的使用


一、循环结构的4个要素
① 初始化条件
② 循环条件  --->是boolean类型
③ 循环体
④ 迭代条件


二、do-while循环结构:

①
do{
	③;
	④;

}while(②);

执行过程:① - ③ - ④ - ② - ③ - ④ - ... - ②


说明:
1.do-while循环至少会执行一次循环体!
2.开发中,使用for和while更多一些; 较少使用do-while;


其二、代码为:



class DoWhileTest {
	public static void main(String[] args) {
		
		
		//遍历100以内的偶数,并计算所有偶数的和及偶数的个数
		int num = 1;
		int sum = 0;//记录总和
		int count = 0;//记录个数
		do{
			
			if(num % 2 == 0){
				System.out.println(num);
				sum += num;
				count++;
			}

			num++;

		}while(num <= 100);
		

		System.out.println("总和为:" + sum);//2550
		System.out.println("个数为:" + count);//50



		//*************体会do-while至少执行一次循环体***************
		int number1 = 10;
		while(number1 > 10){
			System.out.println("hello:while");
			number1--;
		}

		int number2 = 10;
		do{
			System.out.println("hello:do-while");//hello:do-while
			number2--;
		}while(number2 > 10);

	}
}


其三、截图为:

在这里插入图片描述

2、do-while 循环结构的案例1:输出正数或负数的个数

其一、描述:



题目:
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为 0 时结束程序。

说明:
1. 不在循环条件部分限制次数的结构:for(;;) 或 while(true)
2. 结束循环有几种方式?
     方式一:循环条件部分返回 false
	 方式二:在循环体中,执行 break

其二、代码为:



import java.util.Scanner;

class ForWhileTest {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int positiveNumber = 0;//记录正数的个数
		int negativeNumber = 0;//记录负数的个数

		for(;;){//while(true){
			
			int number = scan.nextInt();

			//判断number的正负情况
			if(number > 0){
				positiveNumber++;
			}else if(number < 0){
				negativeNumber++;
			}else{
				//一旦执行break,跳出循环
				break;
			}

		}

		System.out.println("输入的正数个数为:" + positiveNumber);
		System.out.println("输入的负数个数为:" + negativeNumber);
	
	}
}


其三、截图为:

在这里插入图片描述

Ⅲ、嵌套循环的使用:

1、嵌套循环结构:

其一、描述:



嵌套循环的使用

1.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环

2.
外层循环:循环结构B
内层循环:循环结构A

3. 说明
① 内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
② 假设外层循环需要执行m次,内层循环需要执行n次; 此时内层循环的循环体一共执行了m * n次

4. 技巧:
   外层循环控制行数,内层循环控制列数


其二、代码为:



class ForForTest {
	public static void main(String[] args) {
		
		//******
		//System.out.println("******");
		for(int i = 1;i <= 6;i++){
			System.out.print('*');
		}

		System.out.println("\n");




		/*
		******
		******
		******
		******
		*/
		for(int j = 1;j <= 4;j++ ){
			for(int i = 1;i <= 6;i++){
				System.out.print('*');
			}
			System.out.println();
		}




		/*			i(行号)		j(*的个数)
		*			1			1
		**			2			2
		***			3			3
		****		4			4
		*****		5			5
		*/

		for(int i = 1;i <= 5;i++){//控制行数
			for(int j = 1;j <= i;j++){//控制列数
				System.out.print("*");
			
			}
			System.out.println();
		}



		
		/*			i(行号)		j(*的个数)   规律:i + j = 5 换句话说:j = 5 - i;
		****		1			4
		***			2			3
		**			3			2
		*			4			1
		*/	

		for(int i = 1;i <= 4;i++){
			for(int j = 1;j <= 5 - i;j++){
				System.out.print("*");	
			}
			System.out.println();
		}

		/*
		*
		**
		***
		****
		*****
		****
		***
		**
		*
		*/

		
	}
}


其三、截图为:

在这里插入图片描述

2、for for 嵌套循环结构的案例1:九九乘法表

其一、描述:



嵌套循环的应用1:

九九乘法表
1 * 1 = 1
2 * 1 = 2  2 * 2 = 4
。。。
9 * 1 = 9 。。。 9 * 9 = 81


其二、代码为:



class NineNineTable {
	public static void main(String[] args) {
		
		for(int i = 1;i <= 9;i++){
			
			for(int j = 1;j <= i;j++){
				System.out.print(i + " * " + j + " = " + (i * j) + "  ");
			}

			System.out.println();
		}
	}
}


其三、截图为:

在这里插入图片描述

3、for for 嵌套循环结构的案例2:100内的所有质数

其一、描述:



100 以内的所有质数的输出。
质数:素数,只能被 1 和它本身整除的自然数。--> 从 2 开始,到这个数 -1 结束为止,都不能被这个数本身整除。

最小的质数是:2


其二、代码为:



class PrimeNumberTest {
	public static void main(String[] args) {
		
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值

		for(int i = 2;i <= 100;i++){//遍历100以内的自然数
			
		
			for(int j = 2;j < i;j++){//j:被i去除
				
				if(i % j == 0){ //i被j除尽
					isFlag = false;
				}
				
			}
			//
			if(isFlag == true){
				System.out.println(i);
			}
			//重置isFlag
			isFlag = true;
		
		}
	}
}


其三、截图为:

在这里插入图片描述

4、for for 嵌套循环结构的案例3:100000内的所有质数

其一、描述:



100000 以内的所有质数的输出。实现方式一
质数:素数,只能被1和它本身整除的自然数。-->从 2 开始,到这个数 -1 结束为止,都不能被这个数本身整除。

对PrimeNumberTest.java文件中质数输出问题的优化


其二、代码为:



class PrimeNumberTest1 {
	public static void main(String[] args) {
		
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
		int count = 0;//记录质数的个数

		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long start = System.currentTimeMillis();

		//优化一:具体实施的方案;
		//for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数
		//	
		//	for(int j = 2;j < i;j++){//j:被i去除
		//		
		//		if(i % j == 0){ //i被j除尽
		//			isFlag = false;
		//			break;//优化一:只对本身非质数的自然数是有效的。
		//		}
		//		
		//	}
		//	//
		//	if(isFlag == true){
		//		System.out.println(i);
		//	}
		//	//重置isFlag
		//	isFlag = true;
		//
		//}



		for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数
			
			//优化二:对本身是质数的自然数是有效的;
			//Math.sqrt(i) 是指:求 i 的根号值,最多到根号 i 就能将排查合数的工作做完了;
			//for(int j = 2;j < i;j++){
			for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除
				
				if(i % j == 0){ //i被j除尽
					isFlag = false;
					break;//优化一:只对本身非质数的自然数是有效的。
				}
				
			}
			
			if(isFlag == true){
				//System.out.println(i);
				//取消直接输出 i 的操作,因为是在大量的输出数据下,会拖慢算法的时间;
				count++;
			}
			//重置isFlag
			isFlag = true;
		
		}

		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("质数的个数为:" + count);
		System.out.println("所花费的时间为:" + (end - start));//17110(6770) - 优化一:break:1546(638) - 优化二:13(6)

	}
}


其三、截图为:

在这里插入图片描述

5、for for 嵌套循环结构的案例4:100000内的所有质数(优化)

其一、描述:



100000 以内的所有质数的输出。实现方式二
质数:素数,只能被 1 和它本身整除的自然数。-->从 2 开始,到这个数 -1 结束为止,都不能被这个数本身整除。

对 PrimeNumberTest.java 文件中质数输出问题的优化


其二、代码为:



class PrimeNumberTest2 {
	public static void main(String[] args) {
		
		
		int count = 0;//记录质数的个数

		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long start = System.currentTimeMillis();

		label:for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数
			
			for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除
				
				if(i % j == 0){ //i被j除尽
					continue label;
				}
				
			}
			//能执行到此步骤的,都是质数;
			count++;
		
		}

		//获取当前时间距离1970-01-01 00:00:00 的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("质数的个数为:" + count);
		System.out.println("所花费的时间为:" + (end - start));//17110(6770) - 优化一:break:1546(638) - 优化二:13(6) - 新方法: 13(11);

	}
}


其三、截图为:

在这里插入图片描述

Ⅳ、关键字:break 与 continue

1、break 与 continue 关键字:

其一、描述:



break 和 continue 关键字的使用:


				使用范围		  	       循环中使用的作用(不同点)		    相同点
				
break:			switch-case			
				循环结构中			   结束当前循环					    关键字后面不能声明执行语句	

continue:		循环结构中			   结束当次循环					    关键字后面不能声明执行语句



其二、代码为:



class BreakContinueTest {
	public static void main(String[] args) {

		for(int i = 1;i <= 10;i++){
		
			if(i % 4 == 0){
				break;//输出:1,2,3;
				//continue;//输出:1,2,3,5,6,7,9,10;
				//System.out.println("今晚迪丽热巴要约我!!!");//会报错,因为该语句永远不会被执行;
			}
			System.out.print(i);
		}

		System.out.println("\n");




		//******************************
		
		label:for(int i = 1;i <= 4;i++){
		
			for(int j = 1;j <= 10;j++){
				
				if(j % 4 == 0){
					//break;//默认跳出包裹此关键字最近的一层循环;
					//输出结果:123,123,123,123;
					//continue;
					//输出结果为:123567910,123567910,123567910,123567910;

					//break label;//结束指定标识的一层循环结构(注意:此时的 label 是标签而不是关键字)
					//输出结果为:123;
					continue label;//结束指定标识的一层循环结构当次循环
					//输出结果为:123123123123;
				}
				
				System.out.print(j);
			}
			
			System.out.println();
		}
	}


其三、截图为:

在这里插入图片描述

Ⅴ、小结:

其一、哪里有不对或不合适的地方,还请大佬们多多指点和交流!
其二、若有转发或引用本文章内容,请注明本博客地址(直接点击下面 url 跳转) https://blog.csdn.net/weixin_43405300,创作不易,且行且珍惜!

标签:11,int,System,while,循环,println,out
From: https://blog.csdn.net/weixin_43405300/article/details/141070573

相关文章

  • C primer plus 6.5 for循环
    for语句:    形式:    for(initialize;test;update)    statement在test为0之前重复执行statement。for语句使用3个表达式控制循环过程,分别用分号隔开。    第一个表达式是初始化,只会在循环开始前执行一次    第二个表达式时测试条......
  • 24/8/11算法笔记AdaBoost多分类原理展示
    importnumpyasnpfromsklearn.ensembleimportAdaBoostClassifierfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_splitfromsklearnimporttreeimportgraphviz加载数据X,y=datasets.load_iris(return_X_y=True)X_train,X_test......
  • Js if 判断 for循环
    三大结构顺序结构:从上到下执行分支结构:选择性执行循环结构:重复执行什么是流程分支结构?条件控制(逻辑分支),就是根据我们设定好的条件来控制程序执行的方式,JavaScript提供了很多控制语法,目前我们先学习使用一种:if()else基本语法语法1-if语句单分支//基本语法:if......
  • PyTorch:从零实现一个双向循环神经网络
    从零实现一个双向循环神经网络(Bi-directionalRecurrentNeuralNetwork,Bi-RNN)从零开始,可以帮助我们深入理解RNN的机制。以下是实现步骤:定义RNN单元:实现一个简单的RNN单元,能够处理单个时间步长的数据。定义双向RNN:实现前向和后向的RNN,组合它们的输出。定义损失函......
  • 巧用Array.forEach:简化循环与增强代码可读性;Array.forEach怎么用;面对大量数据时怎么提
    目录Vue.js中的Array.forEach:简化循环与增强代码可读性一、引言二、Array.forEach()的使用与技巧1、基本语法2、返回值3、使用Array.forEach()的优势4、Array.forEachvsfor循环5、Array.forEach()使用技巧三、Array.forEach()的应用情景1、复杂数据处理2、实时更......
  • 【中项】系统集成项目管理工程师-第11章 项目范围管理-11.4创建WBS
    前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。     软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”,目前涵盖了计算机软件、计算机网络、计算机应用技术......
  • 8.11 随机组题,随机做题
    8.11EpicRoundAugest2024(Div.1+Div.2)Solve:A~C+E+F1(4.5/8)Rank:463Rating:\(2116+58=2174\)Perf:2348发挥评价:Normal这场排名比上次低,但是Perf比上次高,怎么回事呢。不过还是降智了没搞出来D,但凡冲出来D1都可以进300名并获得Grandmaster的P......
  • centos7 编译 Qt5.11.3
    默认环境gcc4.8.520150623qt5.9.7kernel3.10.0GNUlibc2.17更换系统源,在2024年6月30后停止更新维护,默认源不可用mvCentOS-Base.repoCentOS-Base.repo.backupwget-OCentOS-Base.repohttp://mirrors.cloud.tencent.com/repo/centos7_base.repowget-Oepel.repo......
  • Leetcode. 11
    这个题开始之前我们首先做一个思路的分析随着这个柱子的不断的变化这个容器中的水也是会跟着相应的变大和变小的所以我们先找出这个里面的规律在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽底边宽度−1​变短:若向内移动短板,水槽的短板min(h[i],h[j])......
  • for循环练习
     staticvoidMain(string[]arg){intintSum=0;for(inti=0;i<=100;i++){intSum+=i;}Console.WriteLine(intSum);Console.ReadKey();......