流程控制语句

java中的语句结构:

  • 顺序结构: 从上到下,从左到右
  • 选择结构: 满足条件执行,不满足不执行
  • 循环结构: 重复的不停的执行某些内容

选择结构

if选择语句

  • 单选择|单分支
//语法格式
if(条件判断语句) {
	执行语句体;
}
  • 执行流程:
  1. 执行条件判断语句
  2. 如果结果为true,执行{ }中的语句体
  3. 如果结果为false,跳过if结构,不执行语句体,继续向下执行后面的代码
  • 双选择|双分支
//语法格式
if(条件判断语句) {
	执行语句体1;
}else {
	执行语句体2;
}
  • 执行流程:
  1. 执行条件判断语句
  2. 如果结果为true,执行语句体1
  3. 如果结果为false,执行语句体2
  • 多选择|多分支
//语法格式
if(条件判断语句1) {
	执行语句体1;
}else if(条件判断语句2) {
	执行语句体2;
}else if(条件判断语句3) {
	执行语句体3;
}
... ...
else {
    执行语句体n;
}
  • 执行流程:
  1. 执行条件判断语句1,如果结果为true,执行语句体1,如果结果为false,继续详细判断
  2. 执行条件判断语句2,如果结果为true,执行语句体2,如果结果为false,继续详细判断
    … …
  3. 如果以上条件都不满足,执行else中的语句体n

注意:如果语句体只有一句,前后的{ }可以省略。

switch选择语句

  • 语法结构:
switch(表达式) {	// 表达式: 一般指一个变量,或者使用表达式
				// 数据类型: byte,short,int,char,枚举(jdk1.5),字符串(jdk1.7)
	case 值1:	// 表达式的值会与case后的值进行判定,判定是否相等 
		语句体1;
		break;	// 提前结束swtich语句,防止case穿透
	case 值2:
		语句体2;
		break;
	case 值3:
		语句体3;
		break;
	....
	default:	// 如果当以上的case后的值都不满足表达式的结果的时候,执行default中的内容
        		// 位置可以改变,可以放在swtich中的任意位置
        		// 一般放在最后,break可以省略,如果放在其他位置,break不能省略
		语句体n;
		break;
}
  • 执行流程:
  1. 计算表达式的结果
  2. 表达式的结果与case后的值依次判断,代码从上到下依次执行,如果与当前case后面值相同,执行对应的语句体
  3. 如果表达式的结果与所有case后的值都不相同,执行default中的语句体
  • 注意事项:
  • case穿透:如果执行完成对应的语句体后没有break,会发生case穿透,后面的case不再判断,执行执行下面的语句体,直到遇到下一个break或者switch的结束而结束
  • default位置可以改变,可以放在swtich中的任意位置,一般放在最后,break可以省略,如果放在其他位置,break不能省略

循环语句

需要重复大量执行某些动作时,可以使用循环语句。java中循环语句有以下三种:

  • for 循环语句
  • while 循环语句
  • do … while 循环语句

for循环语句

  • 语法结构:
// 条件初始化:声明一个变量i,并且赋初始值,作用域只是在当前循环体中
// 			变量i,可以控制循环的次数,控制要使用的参数
// 条件判断:判断条件i是否满足要求
// 条件变化:i自身值的改变
for(条件初始化; 条件判断; 条件变化) {
	循环体语句;
}
  • 执行流程:
  1. 执行条件初始化,声明一个变量并赋初始值
  2. 进行条件判断,判断是否满足条件,如果结果false,for循环结束,循环体不会再次进入
  3. 如果结果true,满足条件,就去执行以此循环体语句
  4. 执行条件变化
  5. 从二次循环开始,就重复执行2,3,4步
  • 注意点:
  • 如果循环体语句只有一句,前后的{}可以省略
  • for( ; ; ) {} 是一个死循环,后面不能有其他代码,否则编译报错:无法访问的语句

while循环语句|条件循环

  • 语法结构:
条件初始化;	
while(条件判断) {
	循环体语句;
	条件变化;	// 切记不要漏掉,否则可能会形成死循环
}
  • 执行流程:
  1. 条件初始化
  2. 执行条件判断
  3. 如果满足条件执行循环体语句,如果不满足条件结束
  4. 重复执行2,3步
  • 注意点:
  • while (true) {}:典型的死循环
  • while (false) {循环体语句;}:会报错;boolean b = false; while (false) {循环体语句;}:不会报错

do… …while循环语句

  • 语法结构:
条件初始化;
do{
	循环体语句;
	条件变化;
} while(条件判断);
  • 与while循环的区别:
  • while循环:先判断条件是否满足,再执行循环体
  • do… …while循环语句:先执行,后判断,无论是否满足条件,都至少执行一次

循环嵌套

循环语句可以互相嵌套,形成多重循环,其中较常见的是双重for循环

  • 语法结构:
for(条件初始化1; 条件判断1; 条件变化1){
	循环体语句;
	for(条件初始化2; 条件判断2; 条件变化2){
		循环体语句;
	}
	循环体语句;
}
  • 外层循环执行一次,内层循环执行一轮
  • 举例:打印九九乘法表:
public class Nine {
	public static void main(String[] args) {
		for(int i = 1; i <= 9; i ++) {
			for(int j = 1; j <= i; j ++) {
				int mul = i * j;
				System.out.print(j + "×" + i + "=" + mul + "\t");
			}
			System.out.println();
		}
	}
}

break和continue

  • break:
  • 作用: 终止,停止,结束整个所在的循环语句
  • 应用场景: 循环和switch语句中
//模拟击鼓传花场景
//产生一个1~11之间的随机数
int num=(int)(Math.random()*(11-1+1)+1);
System.out.println(num);
int i=0; //学生的编号
//游戏开始
while(true){
	i++;
	if(i==num){
		System.out.println("游戏结束"+i);
		break;	// 与while(true)配合是break的典型用法
	}
}
  • continue:
  • 作用: 跳过本次循环后面的所有内容,继续下一次循环
  • 应用场景: 只能用在循环中
// 打印1~10之间的数,遇到3|3的倍数就跳过
for(int i = 0; i <= 10; i++) {
	if(i % 3 == 0) {
		System.out.println("跳过");
		continue; //下面的代码不执行,直接进入下一次循环
		//System.out.println(i);	// 编译报错: 无法访问的语句
	}
	System.out.println(i);
}