流程控制结构
概念
流程控制: 代码执行顺序控制,代码执行的顺序决定了程序运行的结果
流程控制结构的分类
顺序结构
分支结构
循环结构
顺序结构
特点: 代码由上到下逐行执行
public class Poem {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 风急天高猿啸哀,渚清沙白鸟飞回。
// 无边落木萧萧下,不尽长江滚滚来。
// 万里悲秋常作客,百年多病独登台。
// 艰难苦恨繁霜鬓,潦倒新停浊酒杯。
// 由上自下依次执行
System.out.println("-----------《登高》-----------------");
System.out.println("风急天高猿啸哀,渚清沙白鸟飞回。");
System.out.println("无边落木萧萧下,不尽长江滚滚来。");
System.out.println("万里悲秋常作客,百年多病独登台。");
System.out.println("艰难苦恨繁霜鬓,潦倒新停浊酒杯。");
}
}
执行结果
------------《登高》-----------------
风急天高猿啸哀,渚清沙白鸟飞回。
无边落木萧萧下,不尽长江滚滚来。
万里悲秋常作客,百年多病独登台。
艰难苦恨繁霜鬓,潦倒新停浊酒杯。
分支结构
三类
1.单分支(if(){})
2.双分支(if(){} else {})
3.多分分支(if(){}else if(){}else if(){}else{})
4.switch case
应用的例子
单分支
if单分支结构
语法:
if(布尔表达式){
//当布尔表达式的值为true语句体才会执行
语句体;
}
例:
public class Demo4 {
public static void main(String[] args) {
//定义一个变量用于存储班级属性 false 错误班级 true 对的班级
boolean class = false;
if (class) {//
System.out.println("班级不对你不能进去");
}
if (!class) {//你可以进去了
System.out.println("班级对了你可以进去了");
}
}
}
if双分支结构
语法:
//这里当布尔表达式值为true时执行语句1,为false时执行语句2
if(布尔表达式){
语句1;
}else{
语句2;
}
例: 用if双分支结构改写,奇数和偶数的练习
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int input = scanner.nextInt();
if (input%2 == 0) {
System.out.println("偶数");
}else {
System.out.println("奇数");
}
}
}
执行结果
请输入一个整数:
25
奇数
if多分支结构
语法:
//这里哪里布尔表达式值为true,执行那个循环体否则执行语句n
语法:
if(布尔表达式1){
语句体1;
}else if(布尔表达式2){
语句体2;
}else if(布尔表达式3){
语句体3;
}
… —> 可以有 n个 else if结构
else{
语句n;
}
例: 模拟某网站站的注册流程
键盘输入用户的年龄,注册系统有以下的需求
0 – 17 —>提示: 注册失败 !
18 — 35 —> 提示: 注册成功
36 — 50 —> 提示: 注册成功
51 — 150 —> 提示: 注册成功
import java.util.Scanner;
public class Demo7 {
public static void main(String[] args) {
// 案例: 模拟某P站的注册流程
//
// 键盘输入用户的年龄,注册系统有以下的需求
//
// 0 -- 17 --->提示: 注册失败 !小屁孩 请发育好再来!
// 18 --- 35 ---> 提示: 注册成功 请尽情的享受,好好学习 天天向上!
// 36 --- 50 ---> 提示: 注册成功 请注意身体!小心猝死!
// 51 --- 150 ---> 提示: 注册成功 兄弟你身体可以啊!
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的年龄:");
int age = scanner.nextInt();
if (age>=0&&age<18) {
System.out.println("注册失败!");
}else if (age<36) {
System.out.println("注册成功!1");
}else if (age <51 ) {
System.out.println("注册成功!2");
}else {
System.out.println("注册成功!3");
}
}
}
执行结果
请输入您的年龄:
25
注册成功!1
switch …case 分支结构
语法
switch(表达式){/*当表达式的值和所有case后的常量都不匹配,才会执行default语句,其执行的顺序和定义的位置没有关系,当定义在最后一行可以省略break,其他行不能省略break 否则会发生case穿透问题.
*/
case 常量1: 语句1;
case 常量2: 语句2;
…
case 常量n: 语句n;
default: 语句 n+1;
}
注意事项:
1. 表达式的值的类型,必须为以下几种类型之一
byte
short
int
char
jdk 5开始 支持枚举
jdk 7开始 支持String
2. 结构中,case后的常量值不允许重复
3. 表达式的值
|--> 从上向下依次和所有的case后的常量值进行等于判断, 如果表达式的值
等于case后的常量值,那么就会执行对应case后的语句,直到遇到break才会跳
出结构,否则就会发生case穿透问题.
case穿透问题解决
问题: 当在结构中,没有遇到break,会按照从上往下的顺序执行所有case后的语句.
解决方式: 使用break ,主动跳出结构
例:
键盘输入一个整数 (1 — 7)
1 — 星期1
2 — 星期2
…
7 — 星期日
import java.util.Scanner;
public class Demo8 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println(“请输入一个1 — 7 之间的整数:”);
int input = scanner.nextInt();
switch (input) {
case 1:
System.out.println("星期1 ");break;
case 2:
System.out.println("星期2 ");break;
case 3:
System.out.println("星期3 ");break;
case 4:
System.out.println("星期4 ");break;
case 5:
System.out.println("星期5 ");break;
case 6:
System.out.println("星期6 ");break;
case 7:
System.out.println("星期日 ");break;
default: System.out.println("请看输入说明!");break;
}
}
}