Java学习笔记-(一)入门-004流程控制语句

一、流程控制

1.1 概述

程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。

1.2 顺序结构

顺序执行,根据编写的顺序,从上到下运行

二、判断语句

2.1 单if语句

2.1.1 格式
if(关系表达式){
   语句体;
2.1.2 执行流程
  • 首先判断关系表达式看其结果是 true还是false
    • 如果是 true 就执行【语句体】
    • 如果是 false 就不执行【语句体】
public class Demo02If {
	public static void main(String[] args) {
		System.out.println("今天天气不错,正在压马路……突然发现一个快乐的地方:网吧");
		int age = 19;
		if (age >= 18) {
			System.out.println("进入网吧,开始high!");
			System.out.println("遇到了一群猪队友,开始骂街。");
			System.out.println("感觉不爽,结账走人。");
		}
		System.out.println("回家吃饭");
	}
}

2.2 if…else语句

2.2.1 格式
if(关系表达式) {
   语句体1;  
}else {
   语句体2;  
}
2.2.2 执行流程
  • 首先判断关系表达式看其结果是 true还是false
    • 如果是 true 就执行【语句体1】
    • 如果是 false 就执行【语句体2】
public class Demo03IfElse {
	public static void main(String[] args) {
		int num = 666;
		
		if (num % 2 == 0) { // 如果除以2能够余数为0,说明是偶数
			System.out.println("偶数");
		} else {
			System.out.println("奇数");
		}
	}
}

2.3 if…else if…else语句

2.3.1格式
if (判断条件1) {
   执行语句1;  
} else if (判断条件2) {
   执行语句2;  
}
...
}else if (判断条件n) {
  执行语句n;   
} else {
   执行语句n+1;  
}
2.3.2 执行过程
  • 首先判断关系表达式 1 看其结果是 true 还是 false
    • 如果是 true 就执行【语句体1】
    • 如果是 false 就继续判断关系表达式 2 看其结果是 true 还是 false
      • 如果是 true 就执行【语句体 2】
      • 如果是 false 就继续判断关系表达式…看其结果是 true 还是 false
        • 如果没有任何关系表达式为 true,就执行【语句体 n+1】。
// x和y的关系满足如下:
// 如果x >= 3,那么y = 2x + 1;
// 如果-1 < x < 3,那么y = 2x;
// 如果x <= -1,那么y = 2x – 1;
public class Demo04IfElseExt {
	public static void main(String[] args) {
		int x = -10;
		int y;
		if (x >= 3) {
			y = 2 * x + 1;
		} else if (-1 < x && x < 3) {
			y = 2 * x;
		} else {
			y = 2 * x - 1;
		}
		System.out.println("结果是:" + y);
	}
}

2.4 练习

需求:指定考试成绩,判断学生等级,90-100 优秀,80-89 好,70-79 良=,60-69 及格,60 以下 不及格。

public class Demo05IfElsePractise {
	public static void main(String[] args) {
		int score = 120;
		if (score >= 90 && score <= 100) {
			System.out.println("优秀");
		} else if (score >= 80 && score < 90) {
			System.out.println("好");
		} else if (score >= 70 && score < 80) {
			System.out.println("良");
		} else if (score >= 60 && score < 70) {
			System.out.println("及格");
		} else if (score >= 0 && score < 60) {
			System.out.println("不及格");
		} else { // 单独处理边界之外的不合理情况
			System.out.println("数据错误");
		}
	}
}

2.5 if…else语句与三元运算符互换

// 使用三元运算符和标准的if-else语句分别实现:取两个数字当中的最大值
public class Demo06Max {
	public static void main(String[] args) {
		int a = 105;
		int b = 20;
		
		// 首先使用三元运算符
		// int max = a > b ? a : b;
		
		// 使用今天的if语句
		int max;
		if (a > b) {
			max = a;
		} else {
			max = b;
		}
		
		System.out.println("最大值:" + max);
	}
}

三、选择语句

3.1 switch语句

3.1.1 格式
switch(表达式) {
  case 常量值1:
    语句体1;
    break;
  case 常量值2:
    语句体2;
    break;
  ...
  default:
    语句体n+1;
    break;
}
3.1.2 执行流程
  • 首先计算出表达式的值
    • case依次比较,一旦有对应的值,就会执行相应的语句体,如果没遇到break就会一直执行后面case里面的语句体,知道遇到break才会结束。
    • 最后,如果所有的 case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
public class Demo07Switch {
	public static void main(String[] args) {
		int num = 10;
		
		switch (num) {
			case 1:
				System.out.println("星期一");
				break;
			case 2:
				System.out.println("星期二");
				break;
			case 3:
				System.out.println("星期三");
				break;
			case 4:
				System.out.println("星期四");
				break;
			case 5:
				System.out.println("星期五");
				break;
			case 6:
				System.out.println("星期六");
				break;
			case 7:
				System.out.println("星期日");
				break;
			default:
				System.out.println("数据不合理");
				break; // 最后一个break语句可以省略,但是强烈推荐不要省略
		}
	}
}

3.2 注意事项

1. case 后面的数值不可以重复。
3. case 后面可以是常量也可以是常量的运算(包括强制转换)。
4. switch 后面小括号当中只能是下列数据类型:
	基本数据类型: byte / short / char / int
	引用数据类型: String 、 enum 枚举 、 Character 、 Byte 、 Short 、 Integer
5. switch 如果是【基本数据类型】和 Character 、 Byte 、 Short ,那必须与 case 类型符合数据类型转换规则(即符合类型转换的类型和取值范围)。
6. 如果 switch 是 String 、 enum 、 Integer ,那 case 只能是对应的类型。
7. defaultcase 语句没有顺序,可以写在任一位置。
8. 如果 case 的后面不写 break ,将出现穿透现象,也就是不会再判断下一个 case 的值,直接向后运行,直到遇到 break ,或者整体 switch 结束。
9. 最后一个语句的 break ,可以不写,因为后面已经没有语句了,但不推荐。

四、循环语句

4.1 概述

循环结构的基本组成部分:

  1. 初始化语句:在循环开始最初执行,而且只做唯一一次。
  2. 条件判断:如果成立,则循环继续;如果不成立,则循环退出。
  3. 循环体:重复要做的事情内容,若干行语句。
  4. 步进语句:每次循环之后都要进行的扫尾工作,每次循环结束之后都要执行一次。

4.2 for循环语句

4.2.1 格式
for(初始化表达式①; 布尔表达式②; 步进表达式④){
	循环体③        
}
4.2.2 执行流程
  • 执行顺序:①②③④ >②③④>②③④…直到②不满足为止。
    • ① 负责完成循环变量初始化
    • ② 负责判断是否满足循环条件,不满足则跳出循环
    • ③ 具体执行的语句
    • ④ 循环后,循环条件所涉及变量的变化情况
public class Demo09For {
	public static void main(String[] args) {
		for (int i = 1; i <= 100; i++) {
			System.out.println("我错啦!原谅我吧!" + i);
		}
		System.out.println("程序停止");
	}
}

4.3 while循环语句

4.3.1 格式
初始化表达式①
while(布尔表达式②){
    循环体③
    步进表达式④
}
4.3.2 执行流程
  • 执行顺序:①②③④ >②③④>②③④…直到②不满足为止。
    • ① 负责完成循环变量初始化。
    • ② 负责判断是否满足循环条件,不满足则跳出循环。
    • ③ 具体执行的语句。
    • ④ 循环后,循环变量的变化情况。
public class Demo10While {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			System.out.println("我错啦!" + i);
		}
		System.out.println("=================");
		
		int i = 1; // 1. 初始化语句
		while (i <= 10) { // 2. 条件判断
			System.out.println("我错啦!" + i); // 3. 循环体
			i++; // 4. 步进语句
		}
	}
}

4.4 do…while循环语句

4.4.1 格式
初始化表达式①
    do{
    循环体③
    步进表达式④
}while(布尔表达式②);//注意这里有分号!!!
4.4.2 执行流程
  • 执行顺序:①③④ >②③④>②③④…②不满足为止。
    • ①负责完成循环变量初始化。
    • ②负责判断是否满足循环条件,不满足则跳出循环。
    • ③具体执行的语句
    • ④循环后,循环变量的变化情况
public class Demo11DoWhile {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			System.out.println("原谅你啦!起来吧!地上怪凉!" + i);
		}
		System.out.println("===============");
		
		int i = 1; // 1. 初始化语句
		do {
			System.out.println("原谅你啦!起来吧!地上怪凉!" + i); // 3. 循环体
			i++; // 4. 步进语句
		} while (i <= 10); // 2. 条件判断
	}
}

4.5 循环语句区别

  1. 如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但是do-while循环会执行至少一次。
  2. for循环的变量在小括号当中定义,只有循环内部才可以使用。while循环和do-while循环初始化语句本来就在外面,所以出来循环之后还可以继续使用。
public class Demo13LoopDifference {
	public static void main(String[] args) {
		for (int i = 1; i < 0; i++) {
			System.out.println("Hello");
		}
		// System.out.println(i); // 这一行是错误写法!因为变量i定义在for循环小括号内,只有for循环自己才能用。
		System.out.println("================");
		
		int i = 1;
		do {
			System.out.println("World");
			i++;
		} while (i < 0);
		// 现在已经超出了do-while循环的范围,我们仍然可以使用变量i
		System.out.println(i); // 2
	}
}

在已知循环次数的时候使用推荐使用 for,循环次数未知的时推荐使用while。

4.6 跳出语句

4.6.1 break

break除了可以用于switch语句,还可以用于循环语句中,表示跳出循环语句;除了这两种场景,其他地方都不能用break。

public class Demo14Break {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			// 如果希望从第4次开始,后续全都不要了,就要打断循环
			if (i == 4) { // 如果当前是第4次
				break; // 那么就打断整个循环
			}
			System.out.println("Hello" + i);
		}
	}
}
4.6.2 continue

立刻跳过当前次循环剩余内容,马上开始下一次循环。

public class Demo15Continue {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			if (i == 4) { // 如果当前是第4层
				continue; // 那么跳过当前次循环,马上开始下一次(第5层)
			}
			System.out.println(i + "层到了。");
		}
	}
}

4.7 死循环

死循环: 也就是循环中的条件永远为true,死循环的是永不结束的循环。例如:while(true){}。

  • 在后期的开发中,会出现使用死循环的场景,例如:我们需要读取用户输入的输入,但是用户输入多少数据我们并不清楚,也只能使用死循环,当用户不想输入数据了,就可以结束循环了,如何去结束一个死循环呢,就需要使用到跳出语句了。

注意: 如果死循环后面没有其他语句,不会报错;如果死循环后面有其他语句时,编译会报错,因为后面的语句无法执行。

public class Demo16DeadLoop {
	public static void main(String[] args) {
		while (true) {
			System.out.println("I Love Java!");
		}
		
		// System.out.println("Hello");
	}
}

4.8 嵌套循环

是指循环里面还可以嵌套循环

public class Demo17LoopHourAndMinute {
	public static void main(String[] args) {
		for (int hour = 0; hour < 24; hour++) { // 外层控制小时

			for (int minute = 0; minute < 60; minute++) { // 内层控制小时之内的分钟
				System.out.println(hour + "点" + minute + "分");
			}

		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值