一、顺序语句
方法里的代码从上往下运行
二、分支语句
(一)if分支
1.简单if分支
简单if分支的语句结构为:
if(表达式){ ...代码块... }
理解:
如果表达式为true,则执行if内的代码块;
如果表达式为false,则执行if以外的代码块
2.复杂if分支
复杂if分支语句主要是针对复杂条件的判断,如:
//案例二:同学Java成绩大于98分,而且音乐成绩大于80分,老师奖励他; //或者Java成绩等于100分,音乐成绩大于70分,老师也可以奖励他。 Scanner scan = new Scanner(System.in); System.out.println("请输入java成绩:"); Double javaScore= scan.nextDouble(); System.out.println("请输入音乐成绩):"); Double musicScore = scan.nextDouble(); if((javaScore>98&&musicScore>80)||(javaScore==100&&musicScore>70)){ System.out.println("奖励"); }
总结:
if分支表达式的结果是boolean类型,只能为true或者false
if分支可以判断区间
if分支可以判断复杂条件
3.if...else分支
if...else分支的语句结构为:
if(表达式){ ...代码块1... }else{ ...代码块2... }
理解:
如果表达式为true,则执行if内的代码块;
如果表达式为false,则执行else内的代码块
总结:
if...else用于二选一的情况
4.多重if分支
if(表达式1){ ...代码块1... }else if(表达式2){ ...代码块2... }else if(表达式n){ ...代码块n... }else{ ...else代码块... }
理解:
从上往下判断表达式,哪个表达式先成立(true),就执行对应的代码块;如果都不成立,就执行else代码块
总结:
表达式都是boolean类型
多重if分支在多选一的时候使用
多重if分支从上往下执行,满足某一表达式为true时,执行该处的表达式后跳出分支
else部分根据需求可写可不写
5.嵌套if
if语句中嵌套if语句,例如:
//某学校召开100米跑,其中跑步时长7-12的进入决赛,并划分男女组 Scanner scan = new Scanner(System.in); System.out.println("请输入比赛成绩"); Double s = scan.nextDouble(); if(s>7&&s<=12){ System.out.println("请输入性别:"); String sex = scan.next(); if(sex.equals("男")){ System.out.println("请进入男子组"); }else if(sex.equals("女")){ System.out.println("请进入女子组"); }else{ System.out.println("错误"); } }else if((s>0&&s<=7)||s>12){ System.out.println("重在参与"); }else if(s<0){ System.out.println("成绩异常"); }
总结:
if支持无限层嵌套
为了代码的可读性,嵌套程度最好不要超过三层
(二)switch分支
switch分支语句结构:
switch(表达式){ case 值1: ...代码块1... break; case 值2: ...代码块2... break; ... case 值n: ...代码块n... break; default: ...default代码块... break; }
理解:
表达式分别与值1、值2、...、值n比较,哪个相同就执行相应的代码块。
总结:
switch主要用于判断单个值是否相同
break表示执行代码块后,跳出当前switch分支
default代码块相当于if分支中的else,按照需求来看写还是不写
(三)if vs switch
if | VS | switch |
---|---|---|
只支持boolean类型的数据 | 表达式 | 支持byte、short、int、char、枚举、String类型的数据 |
if可以判断区间和复杂条件 | 应用场景 | 判断单个值是否相同 |
三、循环语句
(一)for循环
for语句结构:
for(表达式1;表达式2;表达式3){ ...代码块/循环体... }
理解:
表达式1 --> 初始化语句
表达式2 --> 判断条件
表达式1 --> 更新变量
执行步骤:
初始化变量
判断条件(结果是boolean类型)
true -- 就执行循环语句,更新变量,重复第二个步骤
false -- 跳出整个循环语句
总结:
初始化变量不一定从0开始,需要根据需求变换
更新变量不一定++,设置为--,+=等都是可以的,需要更根据要求灵活变换
在循环中声明的变量其作用域只能在循环中使用(即定义在循环里的变量,在循环外无法使用)
更新变量中++i和i++没有区别,都是+1的意思
(二)for循环嵌套
for循环中嵌套for循环,在for循环嵌套中,外层循环控制行,内层循环控制列。
关于for循环嵌套有几个经典的例子,我会把它放在最后,大家可以适当理解练习一下。
(三)while循环
while语法结构:
while(表达式){ ...代码块/循环体... }
理解:
表达式的结果是boolean类型,当结果为true时,执行循环体;结果为false时,跳出循环。
总结:
while循环可以实现for循环的功能
(四)do-while循环
do-while语法结构:
do{ ...代码块/循环体... }while(表达式)
理解:
先执行一遍代码块,再判断表达式。表达式的结果是boolean类型,当结果为true时,执行循环体;结果为false时,跳出循环。
(五)三种循环的区别
区别 | for | while | do-while |
---|---|---|---|
语法结构 | for(初始化变量;判断条件;更新变量){} | while(判断条件){} | do{}while(判断条件) |
执行顺序 | 先判断,再执行 | 先判断,再执行 | 先执行一次,再判断执行 |
应用场景 | 循环次数确定时,使用for循环 | 循环次数不确定时,并且先判断再执行,使用while循环 | 循环次数不确定时,并且先执行一遍再判断,使用do-while循环 |
四、特殊的流程控制语句
语句 | 理解 |
---|---|
break | break作用于循环中,表示跳出当前循环。 |
continue | continue作用于循环中,表示跳过当前循环剩余部分,进入下一次循环。 |
return | return作用在方法中,表示结束当前方法。 |
label | label 给循环做标记(给循环取名字)。可以在复杂的循环中,由内层循环结束指定循环。 |
break与continue的区别如图示:
补充:for循环嵌套例子
打印如下图形:
案例一:
**** i=0 j:4 **** i=1 j:4 **** i=2 j:4
for(int i = 0;i<3;i++){//控制有3行 for(int j = 0;j<4;j++){//控制有四列 System.out.print("*");//打印* } System.out.println();//换行 }
注意:此处打印使用print而不是println。因为println自带换行功能,因此使用print保证每一行的*不会自动换行。
案例二:
* i=0 j:1 ** i=1 j:2 *** i=2 j:3 **** i=3 j:4 ***** i=4 j:5 注意:此处的j以及之后的k,后面跟的都是他们在第i行的个数。
for(int i = 0;i<5;i++){ for(int j = 0;j<=i;j++){ System.out.print("*"); } System.out.println(); }
案例三:
* i=0 k:4 j:1 ** i=1 k:3 j:2 *** i=2 k:2 j:3 **** i=3 k:1 j:4 ***** i=4 k:0 j:5
for(int i = 0;i<5;i++){ for(int k = 0;k<4-i;k++){//控制每行空格的个数 System.out.print(" "); } for(int j = 0;j<=i;j++){//控制每行*的个数 System.out.print("*"); } System.out.println(); }
案例四:
***** i=0 j:5 **** i=1 j:4 *** i=2 j:3 ** i=3 j:2 * i=4 j:1
for(int i = 0;i<5;i++){ for(int j = 0;j<5-i;j++){ System.out.print("*"); } System.out.println(); }
案例五:
***** i=0 k:0 j:5 **** i=1 k:1 j:4 *** i=2 k:2 j:3 ** i=3 k:3 j:2 * i=4 k:4 j:1
for(int i = 0;i<5;i++){ for(int k = 0;k<i;k++){ System.out.print(" "); } for(int j = 0;j<5-i;j++){ System.out.print("*"); } System.out.println(); }
案例六:
* i=0 k:3 j:1 *** i=1 k:2 j:3 ***** i=2 k:1 j:5 ******* i=3 k:0 j:7
for(int i = 0;i<4;i++){ for(int k = 0;k<3-i;k++){ System.out.print(" "); } for(int j = 0;j<i*2+1;j++){ System.out.print("*"); } System.out.println(); }
案例七:
* i=0 k:3 * * i=1 k:2 * * i=2 k:1 ******* i=3 k:0
for(int i = 0;i<4;i++){ for(int k = 0;k<3-i;k++){ System.out.print(" "); } for(int j = 0;j<i*2+1;j++){ //第一行||最后一行||第一列||最后一列 if(i==0||i==3||j==0||j==i*2){ System.out.print("*"); }else{ System.out.print(" "); } } System.out.println(); }
案例八:
******* i=0 k:0 j:7 ***** i=1 k:1 j:5 *** i=2 k:2 j:3 * i=3 k:3 j:1
for(int i = 0;i<4;i++){ for(int k = 0;k<i;k++){ System.out.print(" "); } for(int j = 0;j<7-i*2;j++){ System.out.print("*"); } System.out.println(); }
案例九:
******* i=0 k:0 * * i=1 k:1 * * i=2 k:2 * i=3 k:3
for(int i = 0;i<4;i++){ for(int k = 0;k<i;k++){ System.out.print(" "); } for(int j = 0;j<7-i*2;j++){ //第一行||最后一行||第一列||最后一列 if(i==0||i==3||j==0||j==7-i*2-1){ System.out.print("*"); }else{ System.out.print(" "); } } System.out.println(); }