Java流程控制
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执 行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。
1. 流程控制语句分类
- 顺序结构
- 分支结构(if、switch)
- 循环结构(while、do…while)
2. 顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多 数的代码都是这样执行的。 顺序结构执行流程图:

3. 分支结构
3.1 if语句
格式1
执行流程:
①首先计算关系表达式的值
②如果关系表达式的值为true就执行语句体
③如果关系表达式的值为false就不执行语句体
④继续执行后面的语句内容

if格式1实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class IfDemo { public static void main(String[] args) { System.out.println("开始"); int a = 10; int b = 20; if(a == b) { System.out.println("a等于b"); } int c = 10; if(a == c) { System.out.println("a等于c"); } System.out.println("结束"); } }
|
格式2
1 2 3 4 5 6
| 格式: if (关系表达式) { 语句体1; } else { 语句体2; }
|
执行流程:
①首先计算关系表达式的值
②如果关系表达式的值为true就执行语句体1
③如果关系表达式的值为false就执行语句体2
④继续执行后面的语句内容

if格式2实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import java.util.Scanner; public class IfTest01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int number = sc.nextInt(); if(number%2 == 0) { System.out.println(number + "是偶数"); } else { System.out.println(number + "是奇数"); } } }
|
格式3
1 2 3 4 5 6 7 8 9 10
| 格式: if (关系表达式1) { 语句体1; } else if (关系表达式2) { 语句体2; } … else { 语句体n+1; }
|
执行流程:
①首先计算关系表达式1的值
②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
④…
⑤如果没有任何关系表达式为true,就执行语句体n+1。

if格式3实例:
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
| import java.util.Scanner; public class IfDemo03 { public static void main(String[] args) { System.out.println("开始"); Scanner sc = new Scanner(System.in); System.out.println("请输入一个星期数(1-7):"); int week = sc.nextInt(); if(week == 1) { System.out.println("星期一"); } else if(week == 2) { System.out.println("星期二"); } else if(week == 3) { System.out.println("星期三"); } else if(week == 4) { System.out.println("星期四"); } else if(week == 5) { System.out.println("星期五"); } else if(week == 6) { System.out.println("星期六"); } else { System.out.println("星期日"); } System.out.println("结束"); } }
|
3.2 switch语句
**格式 **
1 2 3 4 5 6 7 8 9 10 11 12
| switch (表达式) { case 1: 语句体1; break; case 2: 语句体2; break; ... default: 语句体n+1; break; }
|
执行流程:
①首先计算出表达式的值
②其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
③最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
switch实例:
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 28 29 30 31 32 33 34 35 36 37 38 39 40
| 需求:一年有 12 个月,分属于春夏秋冬 4 个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。 运行结果: 春: 3 、 4 、 5 夏: 6 、 7 、 8 秋: 9 、 10 、 11 冬: 1 、 2 、 12 public class Demo 1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个月份:"); int month = sc.nextInt(); switch(month) { case 1 : case 2 : case 12 : System.out.println("冬季"); break; case 3 : case 4 : case 5 : System.out.println("春季"); break; case 6 : case 7 : case 8 : System.out.println("夏季"); break; case 9 : case 10 : case 11 : System.out.println("秋季"); break; default: System.out.println("你输入的月份有误"); } } } 注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象
|
4. 循环结构
4.1 for循环结构
循环阐述:
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。
for循环格式:
1 2 3
| for (初始化语句;条件判断语句;条件控制语句) { 循环体语句; }
|
1 2 3 4 5 6 7 8 9
| 格式解释:
初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情
条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
|
执行流程:
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续
for循环练习
1.输出数据
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 需求:求1-5之间的数据和,并把求和结果在控制台输出 public class ForTest 01 { public static void main(String[] args) { for(int i= 1 ; i<= 5 ; i++) { System.out.println(i); } System.out.println("--------"); for(int i= 5 ; i>= 1 ; i--) { System.out.println(i); } } }
|
2.求和
示例代码:
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 28 29
| 需求:求1-100之间的偶数和,并把求和结果在控制台输出 public class ForTest 02 { public static void main(String[] args) { int sum = 0 ; for(int i= 1 ; i<= 5 ; i++) { sum += i;
} System.out.println(" 1 - 5 之间的数据和是:" + sum); } } 本题要点:
今后遇到的需求中,如果带有求和二字,请立即联想到求和变量
求和变量的定义位置,必须在循环外部,如果在循环内部则计算出的数据将是错误的
|
3.求偶数和
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 需求:求1-100之间的偶数和,并把求和结果在控制台输出 public class ForTest03 { public static void main(String[] args) { int sum = 0; for(int i=1; i<=100; i++) { if(i%2 == 0) { sum += i; } } System.out.println("1-100之间的偶数和是:" + sum); } }
|
4. 水仙花
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 需求:在控制台输出所有的“水仙花数” 解释:什么是水仙花数? 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数 例如 153 3 * 3 * 3 + 5 * 5 * 5 + 1 * 1 * 1 = 153 思路: 1. 获取所有的三位数,准备进行筛选,最小的三位数为 100 ,最大的三位数为 999 ,使用for循环获取 2. 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数 public class ForTest04 { public static void main(String[] args) { for(int i=100; i<1000; i++) { int ge = i%10; int shi = i/10%10; int bai = i/10/10%10; if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) { System.out.println(i); } } } }
|
5.统计水仙花数个数
示例代码:
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
| 需求:统计“水仙花数”一共有多少个,并在控制台输出个数 public class ForTest05 { public static void main(String[] args) { int count = 0; for(int i=100; i<1000; i++) { int ge = i%10; int shi = i/10%10; int bai = i/10/10%10; if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) { count++; } } System.out.println("水仙花共有:" + count + "个"); } }
本题要点: 今后如果需求带有统计xxx,请先想到计数器变量 计数器变量定义的位置,必须在循环外部
|
4.2 while循环结构
while循环格式:
1 2 3 4 5
| 初始化语句; while (条件判断语句) { 循环体语句; 条件控制语句; }
|
执行流程:
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class WhileDemo { public static void main(String[] args) { for(int i=1; i<=5; i++) { System.out.println("HelloWorld"); } System.out.println("--------"); int j = 1; while(j<=5) { System.out.println("HelloWorld"); j++; } } }
|
while循环练习
1.珠穆朗玛峰
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。 请问,我折叠多少次,可以折成珠穆朗玛峰的高度? public class WhileTest { public static void main(String[] args) { int count = 0; double paper = 0.1; int zf = 8844430; while(paper <= zf) { paper *= 2; count++; } System.out.println("需要折叠:" + count + "次"); } }
|
4.3 do…while循环结构
do…while循环格式:
1 2 3 4 5
| 初始化语句; do { 循环体语句; 条件控制语句; }while(条件判断语句);
|
执行流程:
① 执行初始化语句
② 执行循环体语句
③ 执行条件控制语句
④ 执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
⑤ 回到②继续
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class DoWhileDemo { public static void main(String[] args) { for(int i=1; i<=5; i++) { System.out.println("HelloWorld"); } System.out.println("--------"); int j = 1; do { System.out.println("HelloWorld"); j++; }while(j<=5); } }
|
4.3 三种循环的区别
三种循环的区别
①for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
②do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
for循环和while的区别
①条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
②条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
死循环(无限循环)的三种格式
-
for(;😉{}
-
while(true){}
-
do {} while(true);
跳转控制语句
跳转控制语句(break),跳出循环,结束循环
跳转控制语句(continue),跳过本次循环,继续下次循环
注意: continue只能在循环中进行使用!
4.4 循环嵌套
概述:
在循环中,继续定义循环
示例代码
1 2 3 4 5 6 7 8
| 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 + "分"); } System.out.println("--------"); }
|
理解
整个内循环,就是外循环的一个循环体,内部循环体没有执行完毕,外循环是不会 继续向下执行的
结论
外循环执行一次,内循环执行一圈