第三章 选择结构
声明
这是我本人在01大学学习Java时的笔记分享,希望能帮助到更多的同学学习Java
课前回顾
1.Java中的8种基本数据类型及内存占用情况
整数 小数 布尔值 字符
byte short int long float double boolean char
1 2 4 8 8 8 4 2
2.变量的定义及语法的使用规则
//1 数据类型 变量名;
// 变量名 = 变量的值;
int a;//告诉计算机在内存中开辟一块4个字节的内存空间,并将这块空间命名为a
a = 5;//告诉计算机将5放入内存空间a中
//2 数据类型 变量名 = 变量的值;
double socre = 90.5;//告诉计算机在内存中开辟一块8个字节的内存空间,并将这块空间命名为score,然后将90.5放入这块空间中
//变量在使用之前必须进行初始化操作,也就是变量在使用之前必须赋值
int age1 = 1 ,age2 = 3;
int totalAge = age1 + age2;
3.变量名的命名规则
变量名必须以字母、下划线、 开始,其余部分由任意多的字母、数字、下划线和 开始,其余部分由任意多的字母、数字、下划线和 开始,其余部分由任意多的字母、数字、下划线和组成
变量名不能用Java中的保留字(关键字)
4.前置++和后置++的区别
int a = 10;
a++;//++a;
//在一行代码中,如果只有++运算符,没有其他运算符,那么++在前还是在后没有区别
//在表达式中,除了++运算符之外还有其他运算符时,++在前就会先自加,然后再利用自加的结果参与运算。++在后,就先
//用本身的值参与运算,运算完之后再自加
int b = a++ + ++a;// a++因为是后置++,因此现将变量a的值(11)拿来参与运算,++a因为是前置++,因此先自加,将得到的结果
//(13)拿来参与运算,因此结果是 11 + 13 = 24
//++a => a=14 a++ => a = 15
int c = ++a + a++;//14 + 14 = 28 ,a = 15
5.数据类型转换
自动类型转换:小转大 10L(长整型) => 10.0f
强制类型转换:大转小 65.5 => (int)65.5 => 60
6.Scanner的基本使用
import java.util.Scanner
Scannner sc = new Scanner(System.in)
//从控制台获取一个字符串
String name = sc.next();
//从控制台获取一个整数
int age = sc.nextInt();
//从控制台获取一个单精度浮点数
float rate = sc.nextFloat();
第一节 关系运算符和逻辑运算符
1.关系运算符
关系运算符包含 > < >= <= != ==
boolean result = 2 > 3;//result为false(假)
boolean result = 10 != 10;//result为false(假)
关系运算符比较的结果是一个布尔值
2.逻辑运算符
逻辑运算符包含
逻辑与&&:主要用来衔接多个条件,表示这些条件必须同时满足时结果才为真,(只要衔接的条件有一个为假,结果为假)
逻辑或 ||:主要用来衔接多个条件,表示这些条件必须要同时不满足时结果才为假,(只要衔接的条件有一个为真,结果为真)
逻辑非!:主要用于单个条件的取反
boolean result = 2 > 3 && 5 > 4;//false
boolean result1 = 2 > 3 || 5 > 4;//true
boolean result2 = !(2 > 3);//ture
第二节 流程图
1.什么是流程图?
流程图就是使用统一的标准图形来描述程序执行的过程
2.为什么要使用流程图?
流程图简单直观,能够很方便地为程序员编写代码提供思路
3.流程图的基本要素
以去银行取钱为例:
第三节 if选择结构
1.基本if选择结构
语法
if(条件){//如果条件满足,则执行代码块
//代码块
}
案例
从控制台输入一个整数,如果该数字小于10,则输出10与该数字的差值。
流程图
代码实现
import java.util.Scanner;
/**
* 从控制台输入一个整数,如果该数字小于10,则输出10与该数字的差值
*
*/
public class Example1 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = sc.nextInt();
if(number < 10) {
int diff = 10 - number;
System.out.println("10与该数字的差值:" + diff);
}
}
}
2.if-else选择结构
语法
if(条件){//如果条件满足,则执行代码块1
//代码块1
} else{//否则,执行代码块2
//代码块2
}
案例
从控制台输入一个整数,如果该数字是偶数,则输出是“偶数”,否则输出“是奇数”。
流程图
代码实现
import java.util.Scanner;
/**
* 从控制台输入一个整数,如果该数字是偶数,则输出是"偶数",否则输出"是奇数"
*
*/
public class Exemple2 {
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("是偶数");
} else {
System.out.println("是奇数");
}
}
}
三元一次运算符(条件?表达式1:表达式2)
? 表示的意思是询问当前的条件是否满足,如果满足,则使用表达式1。
: 表示否则,即条件不满足,则使用表达式2
import java.util.Scanner;
/**
* 从控制台输入一个整数,如果该数字是偶数,则输出是"偶数",否则输出"是奇数"
*
*/
public class Exemple2 {
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("是偶数");
// } else {
// System.out.println("是奇数");
// }
System.out.println((number % 2 == 0) ? "是偶数" : "是奇数");
}
}
三元一次运算符执行效率相较于if-else选择结构来说较为低下,不建议大家常用
3.嵌套if选择结构
语法
if(条件1){//如果条件1满足,则执行其后大括号中的代码块
if(条件2){//在满足条件1的基础上再满足条件2
//代码块
} else {//该结构可以省略不写,表示其他情况不做任何处理
//代码块
}
} else {//该结构可以省略不写,表示其他情况不做任何处理
if(条件3){//在不满足条件1的基础上再满足条件3
//代码块
} else {//该结构可以省略不写,表示其他情况不做任何处理
//代码块
}
}
案例
在半决赛中,如果取得胜利,即可以进入决赛。否则,输出“已被淘汰”。如果是男子,则输出“进入男子组决赛”;否则,输出“进入女子组决赛”。
流程图
代码实现
import java.util.Scanner;
/**
*在半决赛中,如果取得胜利,即可以进入决赛。否则,输出“已被淘汰”。
* 如果是男子,则输出“进入男子组决赛”;否则,输出“进入女子组决赛”。
*
*/
public class Example3 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入是否获胜(Y/N):");
String win = sc.next();
//比较字符串相同使用字符串的equals方法
if("Y".equals(win)){
System.out.println("请输入性别:");
String sex = sc.next();
if("男".equals(sex)){
System.out.println("进入男子组决赛");
} else {
System.out.println("进入女子组决赛");
}
} else {
System.out.println("已被淘汰");
}
}
}
练习
从控制台输入一个整数,如果该整数小于10,则将该整数乘以3,再加上5,输出最后得到的结果是奇数还是偶数;否则,直接输出该整数是奇数还是偶数。
import java.util.Scanner;
/**
* 从控制台输入一个整数,如果该整数小于10,则将该整数乘以3,再加上5,
* 输出最后得到的结果是奇数还是偶数;否则,直接输出该整数是奇数还是偶数。
*
*/
public class Exercise3 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = sc.nextInt();
if(number < 10){
number = number * 3 + 5;
if(number % 2 == 0){
System.out.println("结果是偶数");
} else {
System.out.println("结果是奇数");
}
} else {
if(number % 2 == 0){
System.out.println("结果是偶数");
} else {
System.out.println("结果是奇数");
}
}
}
}
4.多重if选择结构
语法
if(条件1){//如果条件1满足,则执行代码块1
//代码块1
} else if(条件2){//如果条件2满足,则执行代码块2,这样的结构可以有很多个
//代码块2
}//else if结构可能有多个
else {//否则,执行代码块3,该结构可以省略不写,表示其他情况不做任何处理
//代码块3
}
案例
小明去买了1注彩票,如果中了一等奖,则可以领取500万;如果中了二等奖,则可以领取100万;如果中了三等奖,则可以领取1000块;如果中了四等奖,则可以领取10块;如果中了五等奖,则可以领取5块;否则,没有奖励。
流程图
代码实现
import java.util.Scanner;
/**
* 小明去买了1注彩票,如果中了一等奖,则可以领取500万;
* 如果中了二等奖,则可以领取100万;如果中了三等奖,则可以领取1000块;
* 如果中了四等奖,则可以领取10块;如果中了五等奖,则可以领取5块;否则,没有奖励。
*
*/
public class Example5 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入中奖等级:");
int level = sc.nextInt();
if(level == 1){
System.out.println("领取500万");
} else if(level == 2){
System.out.println("领取100万");
} else if(level == 3){
System.out.println("领取1000块");
} else if(level == 4){
System.out.println("领取10块");
} else if(level == 5){
System.out.println("领取5块");
} else {
System.out.println("没有奖励");
}
}
}
练习
考试成绩一般分为优、良、中、差四个等级。划分标准为:90100为优秀,8090为良好,60~80为中等,60以下为差生。从控制台输入一个分数,并输出该分数所属等级
import java.util.Scanner;
/**
* 考试成绩一般分为优、良、中、差四个等级。划分标准为:90~100为优秀,80~90为良好,60~80为中等,60以下为差生。
* 从控制台输入一个分数,并输出该分数所属等级
*
*/
public class Exercise5 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入分数:");
int score = sc.nextInt();
if(score <= 100 && score >= 90){
System.out.println("优");
} else if(score < 90 && score >= 80){
System.out.println("良");
} else if(score < 80 && score >= 60){
System.out.println("中");
} else if(score < 60){
System.out.println("差");
}
}
}
5.逻辑短路
逻辑与短路
使用逻辑与衔接的多个条件中,只要其中一个条件为假,那么该条件之后的所有条件将得不到执行,形成逻辑与短路
逻辑或短路
使用逻辑或衔接的多个条件中,只要其中一个条件为真,那么该条件之后的所有条件将得不到执行形成逻辑或短路
第四节 switch选择结构
1.概念
switch表示开关的意思,为了帮助理解,下面以线路为例,进行解释说明
上图中表示一条带有多个开关的线路,当开关打开时,该开关所控制的灯即被点亮。
2.语法规则
switch(表达式){ //作用在表达式的结果上
case 常量1://如果表达式的结果为常量1,表示该开关被打开,那么代码块1将被执行
//代码块1
break;//表示开关已经做完事情,跳出switch
case 常量2://如果表达式的结果为常量2,表示该开关被打开,那么代码块2将被执行
//代码块2
break;//表示开关已经做完事情,跳出switch
case 常量3://如果表达式的结果为常量3,表示该开关被打开,那么代码块3将被执行
//代码块3
break;//表示开关已经做完事情,跳出switch
default://如果表达式的结果不在常量1、常量2、常量3中,表示该开关被打开,那么代码块4将被执行
//代码块4
break;//表示开关已经做完事情,跳出switch
}
3.switch支持的数据类型
byte short int char Enum string
switch选择结构从JDK1.7开始才支持String类型
4.案例
某公司在年终决定对研发部工作人员根据职位级别进行调薪,调薪信息如下:
- 1级 +500
- 2级 +800
- 3级 +1200
- 4级 +2000
请从控制太输入员工当前薪水和职位级别,并计算出年终调薪后的薪资
流程图
import java.util.Scanner;
/**
* 某公司在年终决定对研发部工作人员根据职位级别进行调薪,调薪信息如下:
* - 1级 +500
* - 2级 +800
* - 3级 +1200
* - 4级 +2000
*
* 请从控制太输入员工当前薪水和职位级别,并计算出年终调薪后的薪资
*
*/
public class Example8 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入当前薪资:");
int salary = sc.nextInt();
System.out.println("请输入职位级别:");
int level = sc.nextInt();
switch(level)
{
case 1:
salary += 500;
break;
case 2:
salary += 800;
break;
case 3:
salary += 1200;
break;
case 4:
salary += 2000;
break;
}
System.out.println("年终调薪后薪资为:" + salary);
}
}
5.常见误区
- 忘掉break,程序会一直执行
public class Example8 {
public static void main(String[] args){
int level = 1;
switch(level)
{
case 1:
salary += 500;//得到执行
//break;
case 2:
salary += 800;//得到执行
//break;
case 3:
salary += 1200;//得到执行
//break;
case 4:
salary += 2000;//得到执行
//break;
}
System.out.println("年终调薪后薪资为:" + salary);
}
}
- case后面的常量重复,编译时会报异常
public class Example8 {
public static void main(String[] args){
int level = 2;
switch(level)
{
case 1:
salary += 500;
break;
case 2:
salary += 800;//重复的case
break;
case 2:
salary += 1200;//重复的case
break;
case 4:
salary += 2000;
break;
}
System.out.println("年终调薪后薪资为:" + salary);
}
}
练习
一年有12个月,4个季节,其中1、2、3月份为春季,4、5、6月份为夏季,7、8、9月份为秋季,10、11、12月份为冬季,从控制台输入月份,输出该月所属季节。
import java.util.Scanner;
/**
*一年有12个月,4个季节,其中1、2、3月份为春季,4、5、6月份为夏季,7、8、9月份为秋季,10、11、12月份为冬季,
* 从控制台输入月份,输出该月所属季节。
*
*/
public class Exercise8 {
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 3:
System.out.println("春季");
break;
case 4:
case 5:
case 6:
System.out.println("夏季");
break;
case 7:
case 8:
case 9:
System.out.println("秋季");
break;
case 10:
case 11:
case 12:
System.out.println("冬季");
break;
}
}
}
总结
1.选择结构
基本if选择结构、if-else选择结构、嵌套if选择结构、多重if选择结构、switch选择机构
2.switch选择机构和多重if选择结构的异同
相同点:
它们都可以用来处理多分支的情况
不同点:
switch选择结构只适用于可穷举的情况,使用场景有限。而多重if选择结构适用于switch选择结构的所有场景,但多重if选择结构还支持对
区间的描述
Scanner输入验证
思考:当需要用户输入一个整数时,用户输入了一个字符串,如何处理这类似的问题
import java.util.Scanner;
/**
* 思考:当需要用户输入一个整数时,用户输入了一个字符串,如何处理这类似的问题
*
*/
public class Example10 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
if(sc.hasNextInt()) {//校验Scanner存储的数据中是否有下一个整数
//如果Scanner中没有数据,则让用户输入,用户输入后再判断是否是整数
int number = sc.nextInt();//将Scanner中存储的整形数据取出来
System.out.println(number);
} else {
System.out.println("你输入的不是整数!");
}
}
}
。而多重if选择结构适用于switch选择结构的所有场景,但多重if选择结构还支持对
区间的描述
Scanner输入验证
思考:当需要用户输入一个整数时,用户输入了一个字符串,如何处理这类似的问题
import java.util.Scanner;
/**
* 思考:当需要用户输入一个整数时,用户输入了一个字符串,如何处理这类似的问题
*
*/
public class Example10 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
if(sc.hasNextInt()) {//校验Scanner存储的数据中是否有下一个整数
//如果Scanner中没有数据,则让用户输入,用户输入后再判断是否是整数
int number = sc.nextInt();//将Scanner中存储的整形数据取出来
System.out.println(number);
} else {
System.out.println("你输入的不是整数!");
}
}
}