一.前言
上一篇我们讲了引用类型,花费了大量时间和精力,反复的敲代码作为练习,相信兄弟们也多少会有一些收获,那今天咱们接着往下讲,java基础之选择结构!
在Java中我们有大量的控制语句,除了一般的顺序控制语句,条件控制语句,是我们最常用的一种语句,下面我们就来介绍语句的应用。
条件语句又称为分支语句,它通过对给定的条件进行判断,从而决定执行两个或多个分支中的哪一支。因此,在编写选择语句之前,应该首先明确判断条件是什么,并确定当判断结果为“真”或“假”时应分别执行什么样的操作(算法)。
条件语句是一种根据条件执行不同代码的语句,如果条件满足则执行一段代码,否则执行其他代码。可将条件语句认为是有点像起因和结果。一种更好的类比方式。
举个例子:父母可能会说的话,如下面的内容:“如果你把房间收拾干净了,你会得到冰淇凌。否则,你会有一个完整的同年(七匹狼~)”。
第一个起因是收拾干净房间,结果是可以得到冰淇凌。第二个起因是不干净的房间,结果是揍你一顿(获得完整的同年)。
在脚本上,可能需要创建类似的语句。可能如下面的内容一样:“如果变量mymoney的值大于10000,那么发送警告告知我的金融状况没问题。否则,发出警告,告知我需要更多钱!”
二、知识点介绍
1、概述
2、if语句
3、switch语句
三、知识点详解
1、概述
选择结构也被称为分支结构。选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java语言提供了两种选择结构语句
(1)if语句
(2)switch语句
2、if语句
2.1、if语句简介
在现实业务中,许多场景需要我们做出条件判断,而每一种条件对应一则业务逻辑。比如,如果考试超过60分,不需要补考,低于60分需要补考。再比如如果是管理员,则可以管理论坛,而普通游客却不可以等等。
对应这样需要选择的业务场景,我们可以使用if选择结构。
2.2、if语句格式
2.2.1、单条件判断(格式1)
满足if条件即执行,不满足不执行。如年龄大于18岁可以游戏防沉迷解除
if语句的语法格式:
if (条件语句){
代码块
}
执行流程:
首先判断关系表达式看其结果是true还是false,如果是true就执行语句体,如果是false就不执行语句体。
流程图:
代码示例:
/*
磊哥的java历险记-@51博客
选择结构if语句的第一种格式,有可能一句话都不打印
格式:
if(条件语句){ if括号内的条件语句是布尔类型,只有两种结果:true ,flase
code;
...
}
执行步骤:
首先判断条件语句是否成立
true:执行if{}中的代码
false:不执行if{}中的代码
*/
代码演示:
package com.Test;
//1.导包
import java.util.Scanner;
public class Main{
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的年龄: ");//磊哥的java历险记-@51博客
int age = sc.nextInt();
if(age >= 18){//
System.out.println("年龄大于等于18岁,游戏解除防沉迷");
}
if(age < 18){
System.out.println("年龄小于18岁,青少年每天游戏时间不得超过两个小时");
}
System.out.println("============="+name+"=============");
}
}
2.2.2、互斥条件判断(格式2)
满足条件执行if语句体,不满足执行else语句体。如年龄大于18岁可以解除游戏防沉迷,小于18岁每天游戏时间不得超过两小时。
if语句第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程:
首先判断关系表达式看其结果是true还是false,如果是true就执行语句体1,如果是false就执行语句体2
流程图:
代码演示:
package com.Test;
/*
磊哥的java历险记-@51博客
选择结构if语句的第二种格式:总会打印一句话
格式:
if(条件语句){
执行语句1;
...
}else{
执行语句2;
...
}
执行流程:
首先判断条件语句是否成立
true:执行if{}中的执行语句1
false:执行else{}中的执行语句2
*/
import java.util.Scanner;
public class Main{
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的年龄: ");
int age = sc.nextInt();
//if 和 else只走一个
//条件成立,就不走else了
if(age >= 18){
System.out.println("年龄大于等于18岁,游戏解除防沉迷");
//条件不成立,走else
}else{
System.out.println("年龄小于18岁,青少年每天游戏时间不得超过两个小时");
}
System.out.println("============="+name+"=============");
}
}
2.2.3、多条件判断(格式3)
在多个条件中选择满足条件的if语句体执行。
例如,对一个学生的考试成绩进行等级的划分;如果分数大于等于80分,小于等于100分等级为优;如果分数大于等于70分,小于80分级为良;如果分数大于等于60分,小于70分等级为及格;60以下为不及格。
if语句第三种格式:
if (判断条件1) {
执行语句1
} else if (判断条件2) {
执行语句2
}
======================
else if (判断条件n) {
执行语句n
} else {
执行语句n+1
}
执行流程:
首先判断关系表达式1看其结果是true还是false,如果是true就执行语句体1,如果是false就继续判断关系表达式2看其结果是true还是false,如果是true就执行语句体2,如果是false就继续判断关系表达式…看其结果是true还是false
…,如果没有任何关系表达式为true,就执行语句体n+1。
流程图:
代码演示:
package com.Test;
import java.util.Scanner;
/*
磊哥的java历险记-@51博客
选择结构if语句的第三种格式:终究会打印一个结果
格式:
if(条件1){
条件1成立执行
}else if(条件2){
条件1不成立,条件2成立执行
}
.....
else if(条件n){
条件1,条件2...都不成立,条件n成立执行
}else{
所有条件都不满足,执行
}
需求:根据成绩判断成绩等级
90-100分:优
80-90分:良
70-80分:中
60-70分:及格
0-60分:不及格
其它成绩:非法成绩
变量的作用域:在自己所在的{}内有效
*/
public class Main{
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args){
//创建接受键入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩: ");
//调用键入方法
double score = sc.nextInt();
if(score >=90 && score <=100){
System.out.println("成绩是"+score+",等级为优!");
}else if(score >=80 && score <90){
System.out.println("成绩是"+score+",等级为良!");
}else if(score >=70 && score <80){
System.out.println("成绩是"+score+",等级为中!");
}else if(score >=60 && score <70){
System.out.println("成绩是"+score+",等级为及格!");
}else if(score >=0 && score <60) {
String falg = "这段话只有在这里才能用,其他代码块中不能调用";
System.out.println(falg);
System.out.println("成绩是"+score+",等级为不及格!");
}else{
//System.out.println(falg);//错误: 找不到符号,falg在其他代码块中
System.out.println("成绩是"+score+",非法成绩!");
}
System.out.println("============="+name+"=============");
}
}
小练习:比大小
代码演示:
package com.Test;
import java.util.Scanner;
public class Main {
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args) {
//创建对象
Scanner sc = new Scanner(System.in);
//接收数据
System.out.println("请输入第一个数据:");
int a = sc.nextInt();
System.out.println("请输入第二个数据:");
int b = sc.nextInt();
//采用if语句格式2实现
/*
if(a>b){
System.out.println("较大的值是:"+a);
}else {
System.out.println("较大的值是:"+b);
}
*/
//拿到较大的值之后,我未必想直接输出,所以我们定义变量接收这个较大的值
int max;
if(a>b){
max = a;
}else {
max = b;
}
//可能做其他的操作
//max += 100;
System.out.println("较大的值是:"+max);
System.out.println("============="+name+"=============");
}
}
2.2.4、多层条件判断
在复杂的业务逻辑中,可以使用多层的条件判断代码是否执行。
如:60分以下的同学不及格重考,60分以上的同学不需要重考,这个区间又可以分为:优秀、良好、及格三个等级。
if(第一层条件){
if(第二层条件){
真正运行逻辑
}
}
代码演示:
package com.Test;
/*
多层if语句:if语句嵌套
格式:
if(条件语句){
if(条件语句){
code;
...
}
}
需求:
成绩>= 60
打印成绩合格,可以升级
90-100分:优
80-90分:良
70-80分:中
60-70分:及格
成<60
打印成绩不及格,需要补考
*/
import java.util.Scanner;
public class Main{
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩: ");
int score = sc.nextInt();
if(score >= 60 && score <=100){
System.out.println("成绩合格,可以升级");
if(score >=90 && score <=100){
System.out.println("成绩是"+score+",等级为优!");
}else if(score >=80 && score <90){
System.out.println("成绩是"+score+",等级为良!");
}else if(score >=70 && score <80){
System.out.println("成绩是"+score+",等级为中!");
}else{
System.out.println("成绩是"+score+",等级为及格!");
}
}
else if(score >=0 && score < 60){
System.out.println("成绩不及格,需要补考");
}else{
System.out.println("非法成绩");
}
System.out.println("程序结束");
System.out.println("============="+name+"=============");
}
}
3、switch语句
3.1、选择结构_switch概念
在现实业务中,许多场景需要我们从多个固定的值中选出一个,执行该数值对应的操作。比如,在一周七天,当输入1-7会打印不同的星期。
对应这样的业务场景,我们可以使用switch选择结构。
3.2、格式switch格式
switch语句的格式:
switch (表达式){
case 目标值1:执行语句1;break;
case 目标值2:执行语句2;break;
......
case 目标值n:执行语句n;break;
default:执行语句n+1;break;
}
执行流程:
首先计算出表达式的值,其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
流程图:
在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,会执行对应case后的语句,如果没找到任何匹配的值,就会执行default后的语句。break的作用是跳出switch语句。
代码演示:
/*
需求:键盘输入对应1-7,输出对应的中文日期
*/
import java.util.Scanner;
public class Main{
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期对应的数字:");
int week = sc.nextInt();//2
switch(week){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("您输入的数字有误!");
break;
}
System.out.println("程序结束");
System.out.println("============="+name+"=============");
}
}
3.3、switch注意事项
(1)switch表示这是switch语句
(2)表达式的取值只能是:byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以是String
(3)如同if语句当中的else,default不是必须存在的,与if语句不同,switch语句只能完成具体值的选择,而不能指定取值区间,case后面跟的是要和表达式进行比较的值
(4)语句体部分可以是一条或多条语句
(5)break表示中断,结束的意思,可以结束switch语句,default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
(6)case条件只判断一次,在判断完一次case条件后,所有的case判断语句将不再起作用,而剩余语句征程执行。这是switch语句的穿透。(了解)
代码演示:
/*
磊哥的java历险记-@51博客
需求:键盘输入对应1-7
1-5:输出工作日
6-7:输出休息日
*/
import java.util.Scanner;
public class Demo02Switch{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期对应的数字:");
int week = sc.nextInt();//2
switch(week){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("您输入的数字有误!");
break;
}
System.out.println("程序结束");
}
}
结语:
选择结构是我们后面会经常用到的语句,所以初学者兄弟,在看完后可以跟着我的演示代码,自己动手打一打代码,会对选择结构的印象更加深刻。
我的文章不是最优秀的,但一定是相对简单的,一看能懂,一学就会的类型,所以希望大家也多多支持,多多关注,本系列持续更新!
感谢大家的持续关注!