一、掌握if分支结构
1、什么是流程控制
流程控制用来控制程序中各个语句的执行顺序
之前写的都是一行一行代码依次执行的,今天我们就来学习一下选择结构,循环结构我们后期会讲。
2、基本的if选择结构
if选择结构是根据条件判断结果选择不同的处理
条件结果必须是布尔值
/*
* 单分支if选择结构:
* 语法结构:
* if(条件){
* //代码块
* }
* 执行规律:
* 如果条件为true,执行{}力的代码块,执行完代码块之后继续执行()后面的代码
* 如果条件为false,则跳过if选择结构,执行()后面的代码
* 注意:
* 条件不管写的多么的简单还是多么的复杂,最终结果应该是布尔值,要么为true要么为false
*
* */
例如:张浩Java成绩大于90分,老师奖励他iPhone13,该怎么做呢?
package cn.bdqn.demo01;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args) {
//张浩Java成绩大于90分,老师奖励他iPhone13
//创建Scanner类
Scanner sc = new Scanner(System.in);
//获得成绩
System.out.println("请输入张浩的Java成绩:");
double score = sc.nextDouble();
//张浩获得奖励的条件:Java成绩需要大于90
if (score>90){
System.out.println("你太棒了");
System.out.println("老师奖励一部iPhone13");
System.out.println("继续努力....");
}
System.out.println("代码执行完毕。");
}
}
使用复杂条件的if选择结构
例如:张浩Java成绩大于90分,并且音乐成绩大于80分时,或者Java成绩等于100分,音乐成绩大于70时,老师奖励他,该怎么做呢?
package cn.bdqn.demo01;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
/*
* 张浩Java成绩大于90分,并且音乐成绩大于80分时,或者Java成绩等于100分,音乐成绩大于70时,老师奖励他
* */
//创建Scanner类对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入张浩的Java成绩:");
double javaScore = sc.nextDouble();
System.out.println("请输入张浩的音乐成绩:");
double musicScore = sc.nextDouble();
if ((javaScore>90 && musicScore>80) || (javaScore==100 && musicScore>70)){
System.out.println("你怎么就这么厉害呢!");
System.out.println("老师奖励iPhone14");
System.out.println("继续努力");
}
System.out.println("程序执行完毕");
}
}
结合运算符的优先级编写条件
最高的优先级:()
最低的优先级:=
优先级:!> 算术运算符 > 关系运算符 > && > ||
复杂条件使用括号提高可读性
3、使用if-else选择结构
/*
* 双分支if—else结构:
* 语法结构:
* if(条件){
* //代码块1
* }else{
* //代码块2
* }
* 执行规律:
* 如果条件为true,执行代码块1,执行玩代码块1后,结束整个if-else结构。继续往后执行if-else结构后面的代码
* 如果条件为false,执行代码块2,执行完代码块2后,结束整个if-else结构,继续往后执行if-else结构后面的代码
*
*/
例如:如果张浩Java考试成绩大于90分,老师就奖励他一个iPhone13,
否则老师就罚他蹲马步
package cn.bdqn.demo02;
import java.util.Scanner;
public class IfElseDemo01 {
public static void main(String[] args) {
/*
* 如果张浩Java考试成绩大于90分,老师就奖励他一个iPhone6s 否则老师就罚他蹲马步
* */
//创建Scanner类对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入张浩Java成绩:");
double javaScore = sc.nextDouble();
//张浩Java成绩满足条件,奖励iPhone6s
if(javaScore>90){
System.out.println("奖励iphone6s");
}
//张浩Java成绩不满足条件,蹲马步
if (javaScore<=90){
System.out.println("罚蹲马步");
}
System.out.println("程序执行完毕");
}
}
4、嵌套if选择结构
嵌套if控制语句可以通过外层语句和内层语句的协作,增强程序的灵活性
例如:对学员的考试成绩评测成绩>=80:良好,成绩>=60:中等,成绩<60:差
package cn.bdqn.demo03;
import java.util.Scanner;
public class IfElseIfDemo01 {
public static void main(String[] args) {
/*
*
* 对学员的考试成绩评测
* 成绩>=80:良好
* 成绩>=60:中等
* 成绩<60:差
*
*/
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的成绩:");
double score = sc.nextDouble();
if (score>=80){
System.out.println("良好");
} else if (score>=60) {
System.out.println("中等");
}else {
System.out.println("差");
}
System.out.println("程序执行完毕");
}
}
例如:使用if选择结构判断一个整数,属于哪个范围:大于0;小于0;等于0
package cn.bdqn.demo03;
import java.util.Scanner;
public class CeShi01 {
public static void main(String[] args) {
//创建Scanner类对象
Scanner sc = new Scanner(System.in);
/*
* 使用if选择结构判断一个整数,属于哪个范围:大于0;小于0;等于0
* */
System.out.println("请输入一个整数:");
int a = sc.nextInt();
if (a>0){
System.out.println("你输入的整数大于0");
} else if (a<0) {
System.out.println("你输入的整数小于0");
}else {
System.out.println("你输入的整数等于0");
}
}
}
随机数
产生随机数 [0~9)的方法如下:
int random = (int)(Math.random)()*10);
产生随机数[num1,num2)的方法如下:
int random = (int)(Math.random)()*(num2-num1)+num1);
例如:抽奖规则:会员的百位数字等于产生的随机数字即为幸运会员号
package cn.bdqn.demo01;
import java.util.Scanner;
public class MathRandomDemo02 {
public static void main(String[] args) {
/*
* 抽奖规则:会员的百位数字等于产生的随机数字即为幸运会员号
* */
//创建一个Scanner类对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的四位会员卡号:");
int cardId = sc.nextInt();
System.out.println("你的会员卡号是:" + cardId);
//获取会员百位数字
int baiwei = cardId/100%10;
System.out.println("百位数字:"+baiwei);
//获取[0,10)之间的随机数
int num = (int)(Math.random()*10);
System.out.println("随机数字:" + num);
//判断是否是幸运会员
if (baiwei == num){
System.out.println("恭喜你,成为幸运会员");
}else {
System.out.println("很遗憾,没能成为幸运会员");
}
System.out.println("程序执行完毕");
}
}
掌握switch分支结构
switch选择结构语法:
/*
* switch选择结构:
* 语法结构:
* switch(表达式){
* case 常量1:
* //语句1
* break;
* case 常量2:
* //语句2
* break;
* case 常量3:
* //语句3
* break;
* ..........
* case 常量n:
* //语句n
* break;
* default:
* //语句m;
* break;
* }
* 执行规律:
* 根据表达式的值去匹配case后面的常量值,匹配上了就执行对应的语句,执行完对应语句后,执行break,结束整个switch结构,继续往下执行switch选择结构之后的代码
* 如果表达式的值与所有的常量值都不匹配,就执行default里面的语句,执行完以后执行break退出整个switch选择结构、
*/
注意:
1)表达式的值可以是int、short、byte、char、枚举类型、String(JDK1.7及以后支持)
2)case后面的常量值不能相同
3)default语句可以省略不写。如果写上表示表达式的值与所有常量值不匹配,就执行default里的语句。default语句可以写在任意位置,一般写在switch的末尾位置
4)switch选择结构只能处理等值判断的情况
5)break的作用是结束整个switch选择结构,如果缺少,代码会继续向下执行,执行下一个case里的语句,这种现象称之为“case穿透”现象。case穿透现象可以合理使用
例如:
韩嫣参加计算机编程大赛
如果第一名,参加麻省理工大学组织的一个月夏令营
如果第二名,奖励惠普笔记本电脑一部
如果第三名,奖励移动硬盘一个
否则,不给任何奖励
package cn.bdqn.demo02;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
/*
* 韩嫣参加计算机编程大赛
* 如果第一名,参加麻省理工大学组织的一个月夏令营
* 如果第二名,奖励惠普笔记本电脑一部
* 如果第三名,奖励移动硬盘一个
* 否则,不给任何奖励
* */
int mingCi = 2;
if (mingCi == 1){
System.out.println("参加麻省理工大学组织的一个月夏令营");
}else if (mingCi == 2){
System.out.println("奖励惠普笔记本电脑一部");
} else if (mingCi == 3) {
System.out.println("奖励移动硬盘一个");
}else {
System.out.println("不给任何奖励");
}
System.out.println("程序执行完毕");
}
}
来个case穿透现象的使用:
输入月份,输出季节
12 1 2 冬季 3 4 5 春季 6 7 8 夏季 9 10 11 秋季
package cn.bdqn.demo02;
public class Demo04 {
public static void main(String[] args) {
// case穿透现象的使用
/*
* 输入月份,输出季节
*
* 12 1 2 冬季 3 4 5 春季 6 7 8 夏季 9 10 11 秋季
*/
int month = 3;
switch (month) {
case 12:
case 1:
case 2:
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;
}
}
}
switch与多重if
相同点
都是用来处理多分支条件的结构
不同点
switch选择结构
只能处理等值条件判断的情况
多重if选择结构
没有switch选择结构的限制,特别适合某个变量处于某个连续区间时的情况
总结
if选择结构,包括以下形式
基本f选择结构:可以处理单一或组合条件的情况
if-else选择结构:可以处理简单的条件分支情况
多重f选择结构:可以处理分段的条件分支情况
嵌套f选择结构:可以处理复杂的条件分支情况
switch选择结构
多重分支并且条件判断是等值判断的情况