控制结构

  • 顺序控制

  • 分支控制

  • 循环控制

  • break

  • continue

  • return

顺序控制

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

  • 前向引用
1
2
3
4
public class Order{
int num1 = 1;
int num2 = num1 + 1; //因为num1在前面已经初始化过了,所以这个地方可以直接引用;如果未初始化而直接引用就会报错
}

分支控制

单分支

  • 基本语法
1
2
3
4
5
6
7
if(条件表达式){
执行代码1;
执行代码2;
执行代码3;
执行代码4;
……………………
}

条件表达式为true就执行{}里面的东西,否则就直接跳过该代码块

双分支

  • 基本语句
1
2
3
4
5
if (条件表达式) {
执行代码块;
} else {
执行代码块;
}

多分支

  • 基本语句
1
2
3
4
5
6
7
8
9
10
11
12
13
if(条件表达式1){
代码块1;
}
else if(条件表达式2) {
代码块2;
}
else if(条件表达式3) {
代码块3;
}
…………………………
else {
代码块
}

多分支的后面可以没有else语句。

嵌套分支

嵌套最多不要超过3层(只是建议,因为太多的话,容易乱);

嵌套分支就是在利用if-elseif-else时在该模块中又加入一层if-else。
image-20240711171413798

测试题
某一歌唱比赛分为男生组和女生组,首先判断该参赛选手被分到的小组,现在是初赛选拔,当选手得分达到80即可晋级(满分是100)。请你设计程序,判断该成员是哪个小组的,是否能晋级。

分析:

  • 判断男女
  • 判断分数是否合规
  • 判断是否晋级
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
System.out.print("请输入性别:");
char gender = scan.next()。charAt(0);

System.out.print("请输入分数:");
double score = scan.nextDouble();

if (score >= 0 && score <= 100){
if (score >= 80){
System.out.println("Congratulations, you are pass!!!");
if(gender == 'F'){
System.out.println("女子组");
}
else if (gender = 'M') {
System.out.println("男子组");
}
else {
System.out.println("请别输入错误!");
}
} else {
System.out.println("Sorry, you are out !!!");
}
}

Switch分支

  • 基本语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch(表达式){
case 常量1:
pass;
break;
case 常量2:
pass;
break;
…………………………
case 常量n:
pass;
break;
default:
pass;
break;
}
  • switch后边的表达式会得到一个常量

  • 判断该常量与下面哪个case一致

    • 进入相应的case,并执行该case的代码块
      • 向下一直走,直到遇到break跳出switch,如果该case没有break,则继续向下一个case走,直到有break,或者全部执行完。
  • 如果没有相应的case,则进入default模块

==注意:==

  • switch后面的表达式返回的值必须跟case后的数据类型一致,或者可以互相转换
  • switch只允许使用(byte, int, char, short, enum, String)
  • case后必须是常量
  • default不是必须的

作业:
输入学生的成绩,满分100,如果大于等于60,则及格;否则,不及格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Scanner scan = new Scanner(System.in);

double score = scan.nextDouble();
if(score >= 0 && score <= 100){
switch (int)(score/60){
case 0 :
System.out.println("N");
break;
case 1 :
System.out.println("Y");
break;
default :
System.out.println("输入有误!");
}
} else {
System.out.println("分数不在范围内");
}

循环控制

for循环

  • 基本语法
1
2
3
for (循环变量初始化;循环条件;循环变量迭代) {
循环操作(可以多条语句);
}
  • 步骤原理
    1. 循环变量初始化
    2. 对循环条件进行判断
    3. 如果符合条件,则执行{}里的循环操作;否则,跳出循环
    4. 执行循环变量迭代
    5. 循环2、3、4直达退出循环

作业小结

  1. 找出1-100之间所有的9的倍数的整数,统计个数 及 总和
  2. 完成输出倒三角
1
2
3
4
5
0102030405
06070809
101112
1314
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//HomeWork_for.java

import java.util.Scanner;

public class HomeWork_for{
public static void main (String[] args){
Scanner scan = new Scanner(System.in);
int num = 0;
int n = scan.nextInt();
for (int i = 1; i <= n; i++){
for (int j = i; j <= n; j++){
if (num < 10){
System.out.print("0");
}
System.out.print(++num);
}
System.out.print("\n");
}
}
}

当然这只是我鄙薄的方法,有更好的思路方法,欢迎大家留言。

while循环

  • 基本框架
1
2
3
while (循环条件) {
循环体;
}

感觉while循环与for循环差不多,当for循环为“for(;循环条件;)”时,就与while一样了。

==注意:==一定要动手实践

还是上面的倒三角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class HomeWork_while{
public static void mian(String[] args){
Scanner scan = new Scanner(System.in);
int num = 0;
int n = scan.nextInt();
int i = 1;
while (i <= n){
int j = i;
while (j <= n){

if (num < 10){
System.out.print("0");
}
System.out.print(++num);
j++;
}
System.out.print("\n");
i++;
}
}
}

do..while循环

  • 基本语法
1
2
3
do{
循环体;
}while(循环条件);

与while差不多,只是这个结构是先循环再判断,所以它至少循环一次,而while甚至可以不进入循环体。

break与continue

1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当 i 等于 5 时,退出循环
}
cout << i << " ";
} // 输出:0 1 2 3 4

for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 当 i 是偶数时,跳过本次循环剩余部分
}
cout << i << " ";
} // 输出:1 3 5 7 9
  • break 用于完全退出循环。
  • continue 用于跳过当前循环迭代的剩余部分,进入下一次迭代。

编程思想

  • 化繁为简:将复杂问题拆解为简单问题,逐步完成
  • 先常后变:先考虑常量值,然后利用灵活变化的变量来替换常量

作业

  1. 输出10 - 50之间所有偶数的和
  2. 判断一个整数是否是水仙花数,(水仙花数是指一个三位数满足各个数位上的数字的立方相加等于其本身,例如153 = 1 * 1 * 1 + 3 * 3 * 3 + 5 * 5 * 5)
  3. 自己实操输出倒三角

小结

控制结构的东西不多,而且与C/C++基本一致,多练两道题,控制结构的知识就能掌握的七七八八了。