流程控制语句结构有顺序结构,分支结构以及循环结构,具体说明见下表所示。
流程控制语句结构 |
---|
顺序结构:从上到下,顺序执行 |
分支结构:根据选择不同,来执行不同的代码。if…else和switch…case |
循环结构:根据条件循环重复执行某段代码。for,while和do…while三种 |
顺序结构:在同一个方法中从上往下执行
package westos.lianxi.zuoye;
/*顺序结构:在同一个方法中代码从上往下依此进行执行.从键盘上输入一个值,并进行打印输出*/
/*实现键盘输入的步骤: 1.导包,格式为:import java.util.Scanner;
导包的位置必须在源文件的上面,在class的上面
2.创建键盘录入对象
格式为:Scanner sc=new Scanner(System.in);
3.通过对象获取数据
格式为:int a=sc.nextInt();
*/
import java.util.Scanner;//导包
public class ShunXuJieGou {
public static void main(String[] args) {
System.out.println("欢迎登陆教务系统");
//创建键盘录入对象
Scanner sc=new Scanner(System.in);
System.out.println("请输入您的姓名:");
String s=sc.next();
System.out.println("您的姓名为:"+s);
System.out.println("请输入您的年龄:");
int age=sc.nextInt();
System.out.println("您的年龄为"+age);
System.out.println("请输入您的分数:");
double score=sc.nextDouble();
System.out.println("您的分数为:"+score);
System.out.println("请告知是否毕业");
boolean flag=sc.nextBoolean();
System.out.println("您的毕业情况为:"+flag);
}
}
输出的结果为:
欢迎登陆教务系统
请输入您的姓名:
小明
您的姓名为:小明
请输入您的年龄:
18
您的年龄为18
请输入您的分数:
85.5
您的分数为:85.5
请告知是否毕业
true
您的毕业情况为:true
if单分支语句的语法格式:
if(条件表达式){
//当条件表达式结果为true时,需要执行的语句块
}
说明:
(1)条件表达式必须是布尔表达式(关系式或逻辑表达式)、布尔变量。
(2)语句块只有一个语句时,{}可以省略,但是建议进行保留
(3)执行流程:条件成立就执行语句,否则就不执行
if else双分支条件语句的语法格式为:
if(条件表达式){
//当条件表达式结果为true时,需要执行的语句块1
}else{
//当条件表达式结果为false时,需要执行的语句块2
}
说明:
(1)条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量。
(2)if或else的语句块只有一个语句时,{}可以省略,但是建议保留
(3)执行结果:当条件成立执行语句块1,不成立执行语句块2
if...else多分支条件语句的语法结构:
if(条件表达式1){
//当条件表达式1结果为true时,需要执行的复合语句1
}else if(条件表达式2){
//当条件表达式结果为true时,需要执行的复合语句2
...
else{
//当上述条件表达式结果为false时,需要执行的语句
}
注意:
(1)每个if或者else后面的{}不是必须的,但是没有{},默认只能带一条语句。即if或者else后面的语句块只有一条语句时,可以省略{},但是可读性不够好。
(2)最后的else不是必须的,可以进行省略
(3)执行过程:从上到下判断条件,如果一旦某个条件成立了,就执行对应的语句块,后面的条件就不会看了。如果所有条件都不满足,如果存在else,那么执行else,那么执行else,如果不存在else,就什么也不执行
package westos.lianxi.zuoye;
public class DuoFenZhi {
public static void main(String[] args) {
int score=89;
//if...else if多分支语句
if(score>90&&score<=100){
System.out.println("成绩优秀");
}
else if(score>80&&score<=90){
System.out.println("成绩良好");
}
else if(score>60&&score<=80){
System.out.println("成绩及格");
}
else{
System.out.println("成绩不及格");
}
}
}
输出的结果为:
成绩良好
if…else系列语句可以嵌套,在任意一个语句块中都可以再嵌套其他的条件语句
执行特点:当外层条件满足时,内层条件才判断
选择结构-switch语法结构:
switch(表达式){
case 常量值1:
//执行语句块1
[break;]//break可以省略
case 常量值2:
//执行语句块2
[break];
......
case 常量值n:
//执行语句块n;
[break];
[default:
//执行缺省语句(默认语句)
[break];
]
}
注意事项 |
---|
表达式返回的结果类型只能是byte,short,char,int,枚举(JDK1.5以后),String(JDK1.7以后) |
表达式返回的结果的类型需要与case后的值的类型保持一致 |
case后面只能跟常量值,不能是变量值或者是不确定的表达式的值 |
同一个switch语句,case的常量值必须互不相同 |
break是可选的,当表达式返回结果与某个case后的值匹配成功后,执行相应分支的语句,一旦进入某个分支后,直到遇到break才能退出switch,否则将会继续执行下一个case语句(也可以成为case穿透) |
default是可选的。位置也不一定在最后,也可以任意case的位置。但是不管在哪里,都是要所有case的常量值不匹配后才会进入default分支,需要遇到break或switch的闭括号"}"才会停止 |
总结:
1.switch的入口,表达式值与某个case匹配,或都不匹配,从default进入
2.switch的出口,遇到break或者switch的闭括号"}"结束
1.当条件判断是等值判断,并且表达式的结果是byte,short,char,int,枚举,String类型的时候,用switch会更合适,其他都使用条件判断
2.可以使用switch…case的,肯定可以使用if…else,返回来不一定
循环结构就是在满足一定条件的情况下反复执行某一段操作。在java中提供了三种常用的循环语句,分别是while循环语句、do…while循环语句和for循环语句。
while循环语句语法结构:
while(条件表达式){
//循环体语句块
}
执行过程:
(1)先判断循环条件
(2)条件成立,执行循环体语句块
(3)回到(1)
(4)知道条件不成立,结束while循环
do while循环语句语法结构:
do{
//循环体语句块
}while(条件表达式);
执行过程:
(1)先无条件执行一次循环体语句块
(2)再判断循环条件
(3)条件成立,再次执行循环体语句块
(4)回到(2)
(5)直到条件不成立,结束do…while循环
注意:
执行一次循环体后,再判断条件,如果条件成立,继续下一次循环体,因此do…while循环至少执行一次循环体
for循环结构语法结构:
for(初始化表达式1;循环条件表达式2;迭代表达式3)[
//循环语句块
}
执行过程:
(1)执行初始化表达式1
(2)判断循环条件表达式2
(3)如果条件成立,执行循环体语句块
(4)执行迭代表达式3
(5)重复(2)(3)(4)(5)
(6)直到循环条件不成立,结束for循环
注意:
三种循环语句的比较 |
---|
三种循环语句都能实现循环重复执行某段代码,可以相互转换 |
执行顺序不同:for、while是先判断后执行,do…while先执行后判断 |
执行效果不同:while和for,如果第一次条件判断不满足,那么循环体将一次都不执行;而do…while是执行一次循环体,然后才判断条件,看是否第二次执行循环体 |
执行效率不同:do…while效率最高 |
每一个循环都有四个循环要素,而for循环体现的最明显,循环变量初始值,循环条件,循环体,循环变量更新迭代 |
for循环适用于循环次数比较明确的,而do…while适用于至少一次的循环。while适用于循环条件比较明确的 |
一个循环体中嵌套了另一个完整的循环结构。一个循环结构充另一个循环的循环体。
三个循环体中都可以嵌套另外任意一种循环结构。
执行特点:先执行外层循环,外循环执行一次,内循环从头到尾执行一轮。
总次数=外循环次数*内循环次数。详细说:总次数=内循环第一轮的次数+内循环第二轮的次数+内循环第三次的次数…+内循环第n轮的次数。轮数就是外循环的次数。
打印一个矩形4行5列的#
(1)打印4行的#
public class QianTao2 {
public static void main(String[] args) {
for(int i=0;i<4;i++){
System.out.println("#####");
}
}
}
public class QianTao2 {
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
System.out.print("#");
}
System.out.println();
}
}
}
跳转 |
---|
break:只能用于switch或者循环中,用于跳出所在的当前循环或switch |
continue:只能用于循环中,提前结束本次循环,继续下一次循环 |
return:用于结束当前方法 |
package westos.lianxi.zuoye;
public class TestBreak {
public static void main(String[] args) {
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
System.out.print("*");
if(i==j){
break;
}
}
System.out.println();
}
}
}
package westos.lianxi.zuoye;
public class TestContinue {
public static void main(String[] args) {
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
System.out.print("*");
if(i==j){
continue;
}
}
System.out.println();
}
}
}