0%

程序控制结构

程序控制结构

第五章 程序控制结构

顺序控制

  • 程序从上到下逐行地进行,中间没有任何判断和跳转。

分支控制 if - else

  • 让程序有选择地执行。

    1. 单分支

      if (条件表达式) { 执行代码块; }

    2. 双分支

      if (条件表达式) { 执行代码块1; }

      else { 执行代码块2; }

    3. 多分支

      if (条件表达式1) { 执行代码块1; }

      else if (条件表达式2) { 执行代码块2; }

      else if (条件表达式n) { 执行代码块n; }

      else { 执行代码块 n+1 ; }

    4. 嵌套分支:在一个分支结构中又完整地嵌套了另一个完整的分支结构,里面的分支结构称为内层分支,外面的分支结构称为外层分支。规范:不要超过三层,可读性不好。

switch 分支结构

switch(表达式){

case 常量1:

​ 语句块1;

​ break;

case 常量2:

​ 语句块2;

​ break;

……

case 常量n:

​ 语句块n;

​ break;

default:

​ default语句块;

}

★switch 分支结构细节
  1. 表达式数据类型,应该和 case 后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是 int
  2. switch(表达式)中表达式的返回值必须是:byte、short、int、charenumString 中的一个;
  3. case 子句中的值必须是常量,而不能是变量;
  4. default子句可以没有。当没有匹配的 case 时,执行 default;
  5. break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块,如果没有写 break ,程序会顺序执行到 switch 结尾。

for 循环控制

for(循环变量初始化 ; 循环条件 ; 循环变量迭代){

​ 循环操作(执行代码块);

}

for 细节
  1. 循环条件是返回一个布尔值的表达式;
  2. for(; 循环判断条件 ;) 中的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略;

(注意:for(; ;) 表示无限循环)

  1. 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。

while 循环控制

循环变量初始化 ;

while(循环条件){

​ 循环操作(执行代码块);

​ 循环变量迭代 ;

}

while 细节
  1. 循环条件是返回一个布尔值的表达式;
  2. while 循环是先判断再执行语句(和 do - while 相反)。

do - while 循环控制

循环变量初始化 ;

do{

​ 循环操作(执行代码块);

​ 循环变量迭代 ;

} while (循环条件) ;

do - while 细节
  1. 循环条件是返回一个布尔值的表达式;
  2. do - while 循环是先执行语句再判断(和 while 相反),因此它至少执行一次。

多重循环控制

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for、while、do - while 均可以作为外层循环和内存循环;
  2. 实质上,嵌套循环就是把内层循环当成外层循环的循环体。只有当内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的外层循环。
  3. 设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m * n 次。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 打印空心金字塔
import java.util.Scanner;

public class Test{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
int totalLevel;
System.out.print("请输入金字塔的层数:");
totalLevel = myScanner.nextInt();
for(int i = 1 ; i <= totalLevel ; i++){
//在输出 * 之前,还需先输出(总层数 - 当前层)个空格
for(int j = totalLevel - i ; j > 0 ; j--){
System.out.print(" ");
}
for(int j = 1 ; j <= 2 * i - 1 ; j++){
//除了第一层和最后一层以外,其他层都是只输出前后两端的 *
if(j == 1 || j == 2 * i -1 || i == totalLevel){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
myScanner.close();
}
}

跳转控制语句 - break

  • 当某个条件满足时,终止循环。

Math.random() ——> 随机生成一个大于等于0.0,小于1.0的小数,double类型

break细节

break 语句出现在多层嵌套循环的语句块中时,可以通过标签指明要终止的是哪一层的语句块;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Test{
public static void main(String[] args){
int n = 100;
label1:
for(int i = 0 ; i < n ; i++){
label2:
for(int j = 0 ; j < n ; j ++){
label3:
for(int k = 0 ; k < n ; k++){
if(条件){
break label1; //满足条件则直接退出 label1 循环体
}
}
}
}
}
}

(注意:break 语句可以指定退出哪一层;

​ lebel 是标签,名称由程序员指定;

break 后指定到哪个 label 就退出哪个 label ;

​ 在实际开发中,尽量不要使用标签;

​ 如果没有指定 break,默认退出最近的循环体。)

跳转控制语句 - continue

  • 用于结束本次循环,继续执行下一次循环。
continue 细节

continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这和前面 break 标签 的使用规则一样。

跳转控制语句 - return

  • return 使用在方法,表示跳出所在的方法;如果用在 main 方法中,则表示退出程序。
---------------The End---------------