一 流程控制
1.1 流程控制语句介绍
一个java程序有很多条语句组成,流程控制语句是用来控制程序中的各语句执行的顺序,通过流程语句控制让程序执行顺序达到我们想要实现的功能。 其流程控制方式采用结构化程序设计中规定的三种基本流程结构: 顺序结构 选择结构 循环结构
1.2 顺序结构
顺序结构介绍
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。 总结:写在前面的先执行,写在后面的后执行
案例
public static void main(String[] args){ System.out.println("买菜"); System.out.println("摘菜"); System.out.println("洗菜"); System.out.println("切菜"); System.out.println("配菜"); System.out.println("炒菜"); System.out.println("吃饭"); System.out.println("吃完了"); System.out.println("锅和碗一起扔了,就可以不用洗了O(∩_∩)O"); }
二 选择结构
2.1 选择结构介绍
选择也被称为分支结构,选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
选择结构的分类
if语句 switch语句
2.2 选择语句if
2.2.1 格式1
if(逻辑表达式或boolean类型的值){ 语句体; }
执行流程
先计算比较表达式的值,看其返回值是true还是false。 true:行语句体 false:不执行语句体
流程图
案例
判断两个变量是否等
代码:
public static void main(String[] args){ // 定义两个变量 int a = 1; int b = 2; //判断两个变量是否相等 if (a == b){ System.out.println("a等于b"); } System.out.println("程序运行完毕!"); }
注意:
1.比较表达式无论简单还是复杂,结果必须是boolean类型 2.if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。 3.一般来说:有左大括号就没有分号,有分号就没有左大括号
2.2.2 if格式2
if(比较表达式) { 语句体1; }else { 语句体2; }
执行流程
首先计算比较表达式的值,看其返回值是true还是false。 true:执行语句体1 false:执行语句体2
流程图
案例
判断一个数是奇数还是偶数
代码
public static void main(String[] args){ // 判断给定的数据是奇数还是偶数 // 定义变量 int a = 1; if(a % 2 == 0) { System.out.println("a变量是一个偶数"); } else{ System.out.println("a变量是一个奇数"); } System.out.println("程序运行完毕!"); }
用三元表达式替换
boolean flag = a % 2 == 0 ? true : false
2.2.3 if格式3
if(比较表达式1) { 语句体1; }else if(比较表达式2) { 语句体2; }else if(比较表达式3) { 语句体3; } ... else { 语句体n+1; }
执行流程
首先计算比较表达式1看其返回值是true还是false, 如果是true,就执行语句体1,if语句结束。 如果是false,接着计算比较表达式2看其返回值是true还是false, 如果是true,就执行语句体2,if语句结束。 如果是false,接着计算比较表达式3看其返回值是true还是false, ... 如果都是false,就执行语句体n+1。 注意事项: 当只要有一个条件满足时,if语句结束。else是可以省略,但是不建议省略。 首先判断关系表达式1看其结果是true还是false true:执行语句体1,if语句结束 false:继续判断关系表达式2看其结果是true还是false true:执行语句体2,if语句结束 false:就继续判断关系表达式…看其结果是true还是false false:执行语句体n+1
流程图
案例1
判断学生成绩等级 90~100 优秀 80~89 良 70~79 中 60~69 及格 0~59 差
代码
int score = 80; if( score >= 90 && score <= 100 ){ System.out.println("优秀") ; }else if(score >= 80 && score <= 89 ){ System.out.println("良") ; }else if(score >= 70 && score <= 79 ){ System.out.println("中") ; }else if(score >= 60 && score <= 69 ){ System.out.println("及格") ; }else { System.out.println("你真的好差,简直差得一匹啊!o(╥﹏╥)o") ; }
案例2:
求3个数800,200,1000中的最大数?
代码:
// 获取三个数据中的最大值 // 定义3个int类型的变量 int a = 800 ; int b = 200 ; int c = 1000 ; // 使用if语句实现 // 定义一个int类型的变量 int max ; // 使用if语句 if( a > b ){ if( a > c ){ max = a ; }else { max = c ; } }else { if( b > c ){ max = b ; }else { max = c ; } } // 输出 System.out.println("max : " + max) ; }
2.3 选择语句switch
2.3.1 switch语句介绍
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个case,且被测试的变量会对每个switch case 进行检查。
switch语句格式
switch(表达式) { case 值1 : 语句体1 ; break ; case 值2 : 语句体2 ; break ; case 值3 : 语句体3 ; break ; ... default: 语句体 n + 1 ; break ; } 1.switch表示这是switch语句 表达式的取值:byte,short,int,char JDK5以后可以是枚举(什么是枚举,以后再讲) JDK7以后可以是String 2.case后面跟的是要和表达式进行比较的值 3.语句体部分可以是一条或多条语句 4.break表示中断,结束的意思,可以结束switch语句 5.default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似
执行流程
先计算表达式的值,依次和case后面的值进行比较,如果匹配成功就是case中的语句体,遇到break结束。如果和所有的case后面的值都不能匹配成功,就执行default中的语句体后结束程序。
流程图
案例
用1-7代表周一到周日,指定一个数字判断对应的星期周期。
代码
//定义一个数字 int num = 8 ; switch(num) { 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("没有您输入的星期周期!o(╥﹏╥)o") ; break ; }
2.3.2 switch注意事项
1.case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的 2.default可以省略吗? 可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。 3.break可以省略吗? 可以省略,但是结果可能不是我们想要的。 会出现一个现象:case穿透。 最终我们建议不要省略 4.default一定要在最后吗? 不是,可以在任意位置。但是建议在最后。 5.switch语句的结束条件 遇到break就结束 执行到末尾就结束
case穿透演示
int month = 1; 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 ; default : System.out.println("没有对应的季节!o(╥﹏╥)o") ; break ; }
2.3.3 switch面试题
byte可以作为switch的表达式吗? long可以作为switch的表达式吗? String可以作为switch的表达式吗?
2.3.4 if语句与switch语句区别
在做判断的时候,我们有两种选择,if语句和switch语句,那么,我们到底该如何选择使用那种语句呢?
if语句使用场景: 针对结果是boolean类型的判断 针对一个范围的判断 针对几个常量值的判断 switch语句使用场景: 针对几个常量值的判断
三 循环语句
3.1 循环语句介绍及分类
循环语句介绍
循环语句的作用是可以让一段代码(语句)重复执行,重复执行的次数可以根据需求进行控制。
循环语句分类
for循环 while循环 do..while循环
3.2 for循环
for循环格式
for(初始化表达式语句;判断条件语句;控制条件语句) { 循环体语句; }
执行流程
先执行初始化表达式语句,只会执行一次 执行判断条件语句,看其返回值是true还是false 如果是true,就继续执行 如果是false,就结束循环 执行循环体语句; 执行控制条件语句 继续判断条件语句
流程图
循环输出10次HelloWorld
for(int x = 1 ; x <= 10 ; x++){ System.out.println("HelloWorld") ; } System.out.println("程序运行结束了......");
计算1-100之间偶数之和
// 需求:求出1-100之间偶数和 // 定义一个累加变量 int sum = 0 ; // 使用for循环 for(int x = 1 ; x <= 100 ; x++){ // 判断 if( x%2 == 0 ){ sum += x ; } } // 输出 System.out.println("偶数和为: " + sum) ;
3.3 循环语句while
while语句格式
初始化条件语句; while(判断条件语句) { 循环体语句; 控制条件语句; }
while执行流程
a:执行初始化条件语句; b:执行判断条件语句,看其返回值是true还是false 如果是true,就继续执行 如果是false,就结束循环 c:执行循环体语句; d:执行控制条件语句 e:回到b继续。
流程图
循环输出10次helloworld
int x = 1 ; // 使用while循环 while( x <= 10 ){ System.out.println("HelloWorld!") ; x++ ; }
计算1-100中偶数之和
// 定义一个累加变量 int sum = 0 ; // 套用while循环的格式 int x = 1 ; while(x <= 100){ // 判断 if( x%2 == 0 ){ sum += x ; } x++ ; } // 输出 System.out.println("sum: " + sum);
3.4 循环语句do...while
do...while格式
初始化条件语句; do { 循环体语句; 控制条件语句; }while(判断条件语句);
执行流程
执行初始化条件语句; 执行循环体语句; 执行控制条件语句; 执行判断条件语句,看其返回值是true还是false true,就继续执行 false,就结束循环
流程图
循环输出10次Helloworld
int y = 1 ; do { System.out.println("HelloWorld") ; y++ ; }while( y <= 3) ;
计算1-100中偶数之和
int sum = 0; int i = 1; do{ if(x%2 == 0){ sum += x; } x++; }while(x<10); System.out.println("sum "+sum);
3.5 循环语句区别
1.do...while循环至少执行一次循环体。 而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。 2.如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道改用谁优先用for循环。 因为for循环中变量及早的从内存中消失,可以提高内存的使用效率。 3.建议优先考虑for循环,然后是while循环 ,最后是do...while循环
3.6 多重循环语句
3.6.1 多重循环介绍
循环里面还有循环,如for循环中且套for循环或且套while循环等。 总循环次数 = 外循环次数 * 内循环次数 格式: for(初始化表达式;条件判断表达式;控制条件表达式){ for(初始化表达式;条件判断表达式;控制条件表达式){ } }
3.6.1 多重循环案例
使用嵌套循环,打印5*8的矩形
//外循环5次, //内循环8次 for(int i = 0; i < 5; i++){ for(int j = 0; j < 8; j++){ //不换行打印星号,没有ln System.out.print("*"); } //内循环打印8个星号后,需要一次换行 System.out.println(); }
效果
******** ******** ******** ******** ********
3.7 死循环语句
死循环介绍
判断条件语句的结果永远都为true,那么循环体会一直无休止的执行下去。 死循环可能导致系统资源占用过高及系统全盘崩溃。
while语句死循环
while(true){...}
for语句死循环
for(;;){...}
3.8 控制跳转语句
3.8.1 控制语句介绍
什么是控制语句
控制语句的目的是为了控制程序跳转、中断等操作,goto是java中保留字目前还不能用,但java中提供了break、continue、return来实现控制语句的跳转和中断。
控制跳转语句的分类
break: 中断,结束单层循环 continue 继续,结束本次循环继续下一次循环 return 返回,结束方法执行
3.8.2 案例演示
break演示
for(int x = 1 ; x <= 10 ; x++){ if(x == 3){ break ; } System.out.println("HelloWorld") ; }
continue演示
for(int x = 1; x <= 10; x++) { if( x % 3 == 0) { continue; } System.out.println("HelloWorld"); }
return演示
for(int x = 1; x <= 10; x++) { if( x % 3 == 0) { return; } System.out.println("HelloWorld"); }
1.break和continue关键字不影响for循环后面的语句执行 2.return是结束当前方法,for循环结束同时整个方法也结束了