3.Java基础(分支流程控制语句、循环流程控制语句)

选择流程控制语句

也叫分支流程控制语句,用于在程序运行时进行流程控制通过条件判断语句进行指定代码块的执行

按照语法分为:

if......else语句

switch......case语句

语法

switch(变量){

case 值:

语句体;

break;

default:

语句体;

}

public static void main(String [] args){
		//创建扫描器对象
		Scanner sc=new Scanner(System.in);
		//获取控制台输入
		String nextLine = sc.nextLine();
		switch(nextLine){
		case "A":
			System.out.println("90~100");
			break;
		case "B":
			System.out.println("70~89");
			break;
		case "C":
			System.out.println("60~69");
			break;
		case "D":
			System.out.println("0~59");
			break;
		default:
			System.out.println("输入有误!");
		}
		sc.close();
	}

格式解释 switch表示这是switch语句 表达式的取值:byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是String case后面跟的是要和表达式进行比较的值 语句体部分可以是一条或多条语句 break表示中断,结束的意思,可以结束switch语句 default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似

 

switch..case使用的是值匹配(比较)的形式进行语句的控制,当指定变量的值与case后的值相等时,执行相应语句。

 

switch......case不使用break原理理解

可以理解为switch中存在一个boolean类型变量默认为false,只有当值匹配时才会将其设置为true,之后按照顺序执行进行相下判断,当执行到代码块时,获取这个变量,如果变量值为true则执行当前代码块

执行流程

首先计算出表达式的值 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

注意事项

case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的 default可以省略吗? 可以省略。一般不建议。除非判断的值是固定的。(单选题) break可以省略吗? 可以省略,一般不建议。否则结果可能不是你想要的 default的位置一定要在最后吗? 可以出现在switch语句任意位置。 switch语句的结束条件 遇到break 执行到程序的末尾

使用场景

if...else与switch...case

当进行范围判断时使用if...else 当进行值匹配判断时使用switch...case(根据判断值个数决定)

实际上在程序开发中if...else使用最多,因为if..else也可以判断值匹配,所有的switch case都可以使用if......else的形式进行书写,但有时实现相应功能没有switch..case方便

循环流程控制语句

在满足一定条件的情况下,重复的执行一段相同的代码

进行判断的条件语句称之为循环条件(当循环条件返回true时执行循环,但一般在程序执行时会对循环条件进行更改,使其在某一时刻返回false以达到终止循环的操作,否则会造成死循环)

重复执行的代码称之为循环体语句

循环语句的组成

初始化语句: 一条或者多条语句,这些语句完成一些初始化操作。 判断条件语句: 这是一个boolean 表达式,这个表达式循环体。能决定是否执行 循环体语句: 这个部分是循环体语句,也就是我们要多次做的事情。 控制条件语句: 这个部分在一次循环体语句结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。

while 循环

语法:

初始化表达式(声明变量并进行初始化赋值)

while(布尔表达式(使用初始化的变量进行条件判断)){

循环体语句

迭代语句(循环控制语句用于修改变量)

}

int i=1;
		while(i<=100){
			System.out.println("hello kitty!"+i);
			i++;
		}

do...while循环

语法:

初始化语句;

do{

循环语句

迭代语句

}while(循环条件);

 

使用do...while循环输出5次helloworld!

	// 1.初始化语句
		int i = 1;
		// 2.循环体
		do {
			System.out.println("hello world"+i);
			// 3.迭代语句
			i++;
			// 4.循环条件
		} while (i <= 5);

while循环与do...while循环的区别

1.语法上的区别

2.执行流程上的区别

while循环先判断后循环,do...while先执行循环体语句之后再进行判断

3.循环语句执行次数的区别

do..while循环语句至少执行一次

for循环

语法:

for(初始化语句1;条件判断语句2;迭代语句3){

循环体;4

}

执行流程与while循环一致:1243243243

for循环可以理解为while循环已知次数循环的简化

for(int i=1;i<=5;i++){
	System.out.println(i);
}

for循环与while循环的区别

1.语法上的区别

2.变量作用域不同

while循环的初始化语句声明在while循环外,除本循环外其他语句也可以使用,for循环变量声明在循环内,只有当前循环可以使用,循环结束后会被销毁

3.变量命名重复

while循环由于初始化语句声明在while循环为,所以作用域同样在while循环外,同一作用域不允许变量重名,

for循环变量多个循环间可以声明相同的变量使用

4.使用场景不同

while用于未知次数的循环

for用于已知次数的循环

循环跳转语句(循环控制语句)

循环控制语句用于在循环中控制循环的终止以及跳转,与迭代语句不同的是,控制语句可以在任意时间停止循环

break:

终止当前代码块后续代码(结束当前循环)

// break结束当前循环
		// for(int i=1;i<=100;i++){
		// if(i==51){
		// break;//结束当前循环
		// }
		// System.out.println(i);
		// }
		int i = 1;
		while (true) {
			if(i>50){
				break;
			}
			System.out.println(i);
			i++;
		}

continue:

跳过本次循环进入下次循环

跳过continue后的本次循环代码

// continue跳过本次循环
		for (int i = 1; i < 100; i++) {
			if(i%2==0){
				continue;
			}
			System.out.println(i);
		}

return:

方法级别的结束,会直接结束当前方法

// return结束当前方法
		for (int i = 1; i < 100; i++) {
			if(i%2==0){
				return;
			}
			System.out.println(i);
		}
		System.out.println("循环结束后执行");

continue:结束当前循环语句之后的代码进入下一次循环

break:结束当前循环

return:结束当前方法

练习:

书写代码完成功能:

1.控制台输入年份,月份,输出指定年份指定月份的天数

// 1.控制台输入年份,月份,输出指定年份指定月份的天数
		// 1、控制台输入=>创建Scanner扫描器对象
		Scanner sc = new Scanner(System.in);
		// 2、输入年份,月份=>使用扫描器对象获取控制台输入的数据并分别创建变量存储
		System.out.println("请输入年份:");
		int year = sc.nextInt();
		System.out.println("请输入月份:");
		int month = sc.nextInt();
		// 3、输出月份天数
		// (1)首先判断年份是否为闰年=>判断年变量存储数据是否能被4整除得出2月天数
		// (2)判断月变量是否为2月后其他月份=>2月根据年份输出 135781012=31天 46911=30天
		// 思路1:使用if。。else完成
		/*
		 * if(month==2){ if(year%4==0){
		 * System.out.println(year+"年"+month+"月有29天"); }else{
		 * System.out.println(year+"年"+month+"月有28天"); } }else
		 * if(month==1||month==3||month==5||month==7||month==8||month==10||month
		 * ==12){ System.out.println(year+"年"+month+"月有31天"); }else
		 * if(month==4||month==6||month==9||month==11){
		 * System.out.println(year+"年"+month+"月有30天"); }
		 */

		// 思路2:使用witch..case完成
		// 思路3:组合使用
		// 额外声明变量day保持实际天数
		int day = 0;
		// 判断年份为day赋值
		if (year % 4 == 0) {
			day = 29;
		} else {
			day = 28;
		}
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			day=31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			day=30;
			break;
		}
		System.out.println(year + "年" + month + "月有" + day + "天");

2.控制台输入年份,输入月份,输入日期,输出指定年份指定日期已过天数

// 2.控制台输入年份,输入月份,输入日期,输出指定年份指定日期已过天数
		// 1.控制台输入=>创建Scanner扫描器对象
		Scanner sc = new Scanner(System.in);
		// 2.输入年份,月份,日期=>使用扫描器对象获取控制台输入的数据并分别创建变量存储
		System.out.println("请输入年份:");
		int year = sc.nextInt();
		System.out.println("请输入月份:");
		int month = sc.nextInt();
		System.out.println("请输入日期:");
		int day = sc.nextInt();
		// 3.判断年份2月天数并使用变量保存
		int twoMonthDay = 0;
		if (year % 4 == 0) {
			twoMonthDay = 29;
		} else {
			twoMonthDay = 28;
		}
		// 4.声明变量保存总天数
		int sumDay = 0;

		// 5.进行天数的相加
		switch (month) {
		case 5:
			sumDay=sumDay+30;//四月
		case 4:
			sumDay+=31;//三月
		case 3:
			sumDay+=twoMonthDay;//二月
		case 2:
			sumDay+=31;//一月
		case 1:
			sumDay += day;
			
		}
		System.out.println("已过天数:" + sumDay);

3.请在控制台输出数据1-10

4.请在控制台输出数据10-1

5.求出1-10之间数据之和

6.求出1-100之间偶数和

7.求出1-100之间奇数和

8.求5的阶乘 12345

9.在控制台输出1000内所有的”水仙花数”(个位数的3次方加十位数的三次方加百位的三次方等于数字本身 水仙花数是3位数)

10统计”水仙花数”共有多少个

扩展题:

1.switch...case 完成输入分数返回等级(ABCD)

2.switch...case完成控制台输入年份,输入月份,输入日期,输出指定年份指定日期还剩天数(不能用总天数-已过天数的形式)

3.输入年份计算天干地支

 

 


已有 0 条评论

    欢迎您,新朋友,感谢参与互动!