分支结构
1.代码运行过程中的常见结构
1.1顺序结构
代码从上到下,从左至右,最基本原则。
1.2分支结构
路上的风景不一样,向左走向右走,结果不一样
代码满足不同的条件,执行不同的结果。
1.3循环结构
代码中存在需要多次执行的情况,这里会使用到循环结构。
2.分支结构
2.1 if 分支结构
【格式】
if (/* 条件判断 */) {
//语句体
}
/* if 分支结构演示 */
class Demo2 {
public static void main(String[] args) {
//假设兜里有十块钱
//int money = 10;
//假设兜里有一块钱
int money = 1;
//money > 5 是一个条件判断,结果是一个boolean类型
if (money >= 5) {
System.out.println("煎饼果子来一套");
money -= 5;
}
System.out.println("if大括号之外的代码~~~");
}
}
【说明】
执行流程:
当前程序运行到if结构式,首先执行条件判断,条件判断的结果是一个boolean类型,如果条件判断为true,执行语句体,为false,不能执行语句体。
最后都会执行到语句体之外
【练习】
/*
1. 判断一个字符是否是大写英文字母
*/
class Demo3 {
public static void main(String[] args) {
//定义一个字符类型的变量
char ch = 'A';
/*
代码结构安排的明明白白的!!
*/
if ( ch >= 'A' && ch <= 'Z' ) {
System.out.println("这里是一个大写字母!!!");
}
System.out.println("大括号之外的语句~~~");
}
}
/* 2判断一个字符是不是英文字符 */
class Demo4 {
public static void main(String[] args) {
//判断字符,需要使用一个字符类型变量
char ch = 'A';
/*
(ch >= 'A' && ch <= 'Z')大写字母范围
(ch >= 'a' && ch <= 'z')小写字母范围
*/
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) {
System.out.println("这里是一个英文字母!!!");
}
System.out.println("大括号之外的语句~~~");
}
}
/* 3.判断一个年份是不是闰年
能被4整除,但是不能被100整除
能被400整除
*/
class Demo5 {
public static void main(String[] args) {
//年份是一个整数,这里用int类型
int year = 2008;
if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
System.out.println("这是闰年。");
}
}
}
2.2 if else 分支结构
【格式】
if (/*条件判断*/) {
//true语句体
} else {
//false语句体
}
【说明】
(1)if分支结构中只能处理条件满足的情况,条件不满足没有任何的处理,所以就有了if else分支结构。
(2)执行流程:
代码执行到if else结构运行,首先判断if之后的条件判断,如果条件判断为true,执行true语句体,如果条件判断为false,执行false语句体。
世界上最遥远的距离是我在if里,你在else里。
【练习】
/*
1. 工资判断
月收入5000以上缴税
月收入5000一下不需要缴税
*/
class Demo6 {
public static void main(String[] args) {
//工资是一个浮点类型数据,这里使用double
double salary = 10000;
/*
语句体:大括号以内的内容,也可以称之为代码块
*/
if (salary > 5000) {
System.out.println("我为国家做贡献");
} else {
System.out.println("我会继续努力,为国家做贡献");
}
}
}
/*
2.是否有女朋友
有 true;没 false
*/
class Demo7 {
public static void main(String[] args) {
boolean hasGirlFriend = true;
/*
if () 小括号内需要的数据类型是boolean类型
hasGirlFriend 该变量就是一个boolean类型数据可以直接用于
if 直接的判断
*/
if (hasGirlFriend) {
System.out.println("奶茶买一送一");
} else {
System.out.println("路见不平一声吼,你还没有女朋友");
}
}
}
/*
3. 判定一个字符是不是数字字符
*/
class Demo8 {
public static void main(String[] args) {
//需要判定的是一个数字字符,这里需要char类
char ch = '1';
/*
这里操作判断的是一个字符类型数据
*/
if (ch >= '0' && ch <= '9') {
System.out.println("该字符是一个数字字符");
} else {
System.out.println("该字符不是一个数字字符");
}
}
}
2.3 if else if 分支结构
【格式】
if (/* 条件匹配1 */) {
//处理方式1
} else if (/* 条件匹配2 */) {
//处理方式2
} else if (/* 条件匹配3 */) {
//处理方式3
} else {
//处理方式4
}
【说明】
执行流程:
代码执行到if else if结构,从上至下,匹配if之后小括号里面的内容,条件匹配成功,执行对应的处理方式,结束分支结构运行。如果没有任何的一个条件匹配,执行else中的语句,也会终止条件匹配。
【注意】
else if 个数不限,可以有多个
【练习】
(1)
用户购物VIP等级
100 - 1000 铜牌会员
1001 - 5000 银牌会员
5001 - 10000 金牌会员
10001 - 50000 钻石会员
50001 黑钻会员
class Demo9 {
public static void main(String[] args) {
//用户的消费数据按照int类型考虑
int money = 2000;
if (money >= 100 && money <= 1000) {
System.out.println("铜牌会员");
} else if (money > 1000 && money <= 5000) {
System.out.println("银牌会员");
} else if (money > 5000 && money <= 10000) {
System.out.println("金牌会员");
} else if (money > 10000 && money <= 50000) {
System.out.println("钻石会员");
} else if (money > 50000) {
System.out.println("黑钻会员");
} else {
System.out.println("非会员");
}
}
}
(2)
学生成绩的等级划分
90 ~ 100 秀儿
80 ~ 90 良儿
70 ~ 80 中儿
60 ~ 70 格儿
60 以下 让你爹穿拖鞋来学校一趟
class Demo10 {
public static void main(String[] args) {
//成绩考虑有0.5的情况,需要使用浮点类型数据,这里采用float类型
float score = 99.5F;
if (score >= 90 && score <= 100) {
System.out.println("秀儿");
} else if (score >= 80) {
System.out.println("良儿");
} else if (score >= 70) {
System.out.println("中儿");
} else if (score >= 60) {
System.out.println("格儿");
} else {
System.out.println("让你爹穿拖鞋来学校一趟");
}
}
}
【综合练习】
前置知识准备:
补充知识点1:Scanner
以上代码每一次的结果都是需要用户修改代码,保存,重新编译后才可以执行结果,对于普通用户而言,该操作可行吗?
我们需要给程序提供一种方式,用于接收用户输入的数据。
Scanner是Java中提供的用于从控制台输入数据到代码中的一种方式,存在一些弊端,容易导致一些错误,这里只要求大家了解一些必要的方法
Scanner使用流程
-
点技能点,Java程序本身是没有直接使用Scanner的能力,这里需要点技能点。官方操作【导包】
固定格式:
import java.util.Scanner;
放在class代码上一行
-
需要得到一个Scanner的变量
固定格式:
Scanner sc = new Scanner(System.in);
-
选择执行对应的方法,从键盘上获取对应的数据
获取int类型 int类型的变量 = sc.nextInt();
获取float类型 float类型的变量 = sc.nextFloat();
获取double类型 double类型的变量 = sc.nextDouble();
获取char类型 char类型的变量 = sc.nextLine().charAt(0);
-
补充知识点2:用户友好性提示
代码运行需要站在用户的角度来思考问题,需要给予用户足够的提示和引导,告知用户当前操作如何完成,考虑代码的友好性!!!
用户粘性问题!!!用户提示!!!用户友好性!!!
补充知识点3:用户输入数据合法性判断
就算在提示中告知用户需要输入的数据范围是多少,但是用户在实际使用的过程中,依然存在输入错误的情况,需要对于用户输入的内容符合我们的判断逻辑需求,进入数据处理过程中。
代码如下:
/*
学生成绩的等级划分
90 ~ 100 秀儿
80 ~ 90 良儿
70 ~ 80 中儿
60 ~ 70 格儿
60 以下 让你爹穿拖鞋来学校一趟
*/
import java.util.Scanner;
class Demo10 {
public static void main(String[] args) {
//成绩考虑有0.5的情况,需要使用浮点类型数据,这里采用float类型
//这里赋值一个初值
float score = 0.0F;
//需要得到一个Scanner变量
Scanner sc = new Scanner(System.in);
//用户友好性提示操作
System.out.println("请输入学生的成绩:");
score = sc.nextFloat();
/*
验证用户输入数据的合法性
如果用户输入的数据不合法,终止程序
不合法:输入数据 > 100 或者 < 0
*/
if (score > 100 || score < 0) {
System.out.println("输入数据不合法!!!");
//程序退出
System.exit(0);
}
/* 成绩等级判断 */
if (score >= 90 && score <= 100) {
System.out.println("秀儿");
} else if (score >= 80) {
System.out.println("良儿");
} else if (score >= 70) {
System.out.println("中儿");
} else if (score >= 60) {
System.out.println("格儿");
} else {
System.out.println("让你爹穿拖鞋来学校一趟");
}
}
}
3.总结
分支结构用于处理代码中出现的一些需要判断,并且按照条件处理的情况!
(1)条件约束要考虑清楚
(2)处理的过程考虑清楚
(3)数据类型选择