1.流程控制
流程控制是用来控制程序中各语句的执行顺序的。流程控制语句主要分三类:顺序结构、分支结构/条件判断、循环结构
顺序结构:自上而下执行
分支结构:根据条件选择执行。好比我拿到录取通知书我才能上大学。那不到录取通知书能上读大学。条件成立我做什么事,不成立我做什么事。常见的分支语句有 if (单分支 \多分支\ 双分支)和switch语句
循环结构:代码重复执行 ,比如我拿录取通知书前提是不是参加高考,如果高考撘到分数线才能报学校拿通知书,如果分数线不够,是不是需要再复读一年。再参加考试再报专业。常见的循环语句有while、 do-while、 for
2.单分支if语句
2.1语法结构
布尔表达式要么是true,要么false
if(布尔表达式){
代码块;
}
2.2执行流程
如果条件成立就执行语句块, 如果条件不成立,就不执行语句块,现实生活中, 如果明天下雨就带伞
2.3案例
根据分数判断级别: >=90分,优;>=70分,良;>=60分,中;<60分, 差
import java.util.*;
public class Test01_If{
public static void main(String[] args){
/*根据分数判断级别
>=90分,优
>=70分,良
>=60分,中
<60分, 差
*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个分数:");
//定义分数的变量
int score=sc.nextInt();
if(score>=90){
System.out.print("你的成绩");
System.out.println("优");
}
//50
if(score<90&&score>=70){
System.out.println("良");
}
if(score<70&&score>=60)
System.out.println("中");
if(score<60){
System.out.println("差");
}
System.out.println("程序执行完了");
}
}
总结:
1.4个if没有关系,都是独立的,并列关系
2.如果代码块只有一条语句情况下,{}是可以省略
3.多分支if-else if语句
3.1语法结构
第一种语法:
if(布尔表达式1){
代码块1;
}else if(布尔表达式2){
代码块2;
}else if(布尔表达式3){
代码块3;
}else if(布尔表达式4){
代码块4;
}
.....
第二种语法:
if(布尔表达式1){
代码块1;
}else if(布尔表达式2){
代码块2;
}else if(布尔表达式3){
代码块3;
}else if(布尔表达式4){
代码块4;
}
.....
else{
代码块;
}
3.2执行流程
如果布尔表达式1成立, 就执行语句块1
否则, 如果布尔表达式2成立就执行语句块2;
否则, 如果布尔表达式3成立就执行语句块3;
否则就执行语句块n
3.3案例
根据分数判断级别: >=90分,优;>=70分,良;>=60分,中;<60分, 差
import java.util.*;
public class Test02_IfElseIF{
public static void main(String[] args){
/*根据分数判断级别
>=90分,优
>=70分,良
>=60分,中
<60分, 差
*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个分数:");
//定义分数的变量
int score=sc.nextInt();
/*
if(score>=90){
System.out.print("你的成绩");
System.out.println("优");
}
//50
if(score<90&&score>=70){
}
if(score<70&&score>=60)
System.out.println("中");
if(score<60){
System.out.println("差");
}*/
if(score>=90||true){
System.out.print("你的成绩");
System.out.println("优");
}else if(score>=70|| true){//else相当于 score<90
System.out.println("良");
}else if(score>=60){//else相当于 score<60
System.out.println("中");
}else{//else相当于 score<60
System.out.println("差");
}
System.out.println("程序执行完了");
}
}
总结:
1.if-else if语句当中的else指的是和前面表达式相反条件
2.多分支语句当中永远只会走一个分支,一个分支一旦走完之后,该语句就结束了。
练习:从键盘上读取一个字符,判断这个字符是否为大写字母、小写字母和数字。
import java.util.*;
public class Test03_IfElseIF{
public static void main(String[] args){
/*从键盘上读取一个字符,判断这个字符是否为大写字母、小写字母和数字。
asc码 a~z A~Z
a--->97 z---》122 65 90
97~122 或者 65~90
*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符:");
//定义分数的变量
char c=sc.next().charAt(0);
//System.out.println((int)c);
/*if(c>=97&&c<=122||c>=65&&c<=90){
System.out.println("输出字符:"+c+"是英文字母");
}*/
String tem="输出字符:";
if(c>='A'&&c<='Z'){
System.out.println(tem+c+"是大写字母");
}else if(c>='a'&&c<='z'){
System.out.println(tem+c+"是小写字母");
}else if(c>='0'&&c<='9'){
System.out.println(tem+c+"是数字");
}
System.out.println(c>='A'&&c<='Z'?"大写字母":c>='a'&&c<='z'?"小写字母":c>='0'&&c<='9'?"数字":"");
System.out.println("程序执行完了");
}
}
4.单分支if-else语句
4.1语法结构
if(布尔表达式){
代码块1;
}else{
代码块2;
}
4.2执行流程
如果条件成立就执行语句块1, 否则(条件不成立),就执行语句块2
4.3案例
判断三位数是不是水仙花
import java.util.*;
public class Test04_IfElse{
public static void main(String[] args){
//判断三位数是不是水仙花
int num=153;
int ge=num%10;
int shi=num%100/10;
int bai=num/100;
if(num==ge*ge*ge+shi*shi*shi+bai*bai*bai){
System.out.println("是水仙花");
}else{
System.out.println("不是水仙花");
}
boolean b=num==ge*ge*ge+shi*shi*shi+bai*bai*bai?true:false;
System.out.println("程序执行完了");
}
}
5.if的嵌套
5.1语法结构
在一个if语句中,又包含另外一个if语句,这就是if语句的嵌套
if(女){
if(好看){
if(个高){
}
}
}
5.2案例
如果年龄够7岁,或者年龄够5岁并且性别为男,就可以搬桌子。要求:至少使用两种方法完成
import java.util.*;
public class Test05_Ifs{
public static void main(String[] args){
/*
如果年龄够7岁,或者年龄够5岁并且性别为男,就可以搬桌子。
要求:至少使用两种方法完成
1)age>=7
2)age>=5且 sex='男'
==========
如果年龄>7----》年龄肯定大于5岁
*/
int age=100;
char sex='男';
/*与的优先级高于或
if(age>=7||age>=5&&sex=='男'){
System.out.println("能搬桌子");
}
*/
if(age>=7){
System.out.println("能搬桌子");
}else if(age>=5){//age<7 //女
if(sex=='男'){ //好看的
System.out.println("能搬桌子");
}
}
System.out.println("程序执行完了");
}
}
6.switch语句
6.1语法结构
switch ( 表达式 ){
case 常量值1 :
语句块1;
break;
case 常量值2 :
语句块2
break;
......
default :
语句块4;
break;
}
注意:表达式的值只能是byte short int String/枚举类型
6.2执行流程
1)先计算 switch后面表达式的值, 如果和case后面的常量值匹配,就转到case后面的语句块执行,
2)遇到break语句就会跳出switch结构
3)如果所有的case常量值都不能与switch表达式的值匹配就执行default子句
4) case后面必须跟是的常量表达式
5)各个case常量值不能重复
6)各个case子句没有先后顺序, 即使default子句也可以放在其他的Case子句前面,不管default子句在哪儿,总是在所有的case值都不匹配的情况下才会执行
6.3案例
输入月份,输出该月有多少天
import java.util.*;
public class Test06_Switch{
public static void main(String[] args){
//输入月份,输出该月有多少天
Scanner sc=new Scanner(System.in);
System.out.println("请输入月份:");
int month=sc.nextInt();
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month+"月份"+"31天");
break;
case 2:
System.out.println(month+"月份"+"28/29天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month+"月份"+"30天");
break;
default:System.out.println("你输入的不是月份");break;
}
System.out.println("程序执行完了");
}
}
问题1:"穿透",如何防止穿透?
加break;(中断)
default(默认)
问题2:default是不是放到所有case语句后面
不是,但是习惯上放最后一行
问题3:优化(格式、case中重复代码、重复代码提取)
根据分数判断级别0~100
import java.util.*;
public class Test07_Switch{
public static void main(String[] args){
/*根据分数判断级别0~100
>=90分,优 90 91 92 93 94 95 96 97 98 99
>=70分,良
>=60分,中
<60分, 差
*/
Scanner sc=new Scanner(System.in);
System.out.println("请输入月份:");
int score=sc.nextInt();
switch(score/10){
case 10:
case 9:
System.out.println("优");
break;
case 7:
case 8:
System.out.println("良");
break;
case 6:
System.out.println("中");
break;
default:
System.out.println("差");
break;
}
System.out.println("程序执行完了");
}
}
if语句和switch语句区别?
1)表达式是等值的话---》if和switch都可以
如果表达式是个范围的话---》if
总结:用if能实现的switch不一定实现,用switch能实现的用if一定能实现
2)swtich应用场景
就是等值判断并且等值情况比较少的情况:
如数字对应星期天、四季