一、流程控制语句
-
顺序结构
顺序结构是程序中最基本的控制流程,没有特定的语法结构,按照代码的先后顺序,一次执行成续重大多数的代码都是这样执行的。
-
分支结构
1.if语句
格式: if(关系表达式){
语句体1;
}else{
语句体2;
}
执行流程:
1)首先计算关系表达式的值
2)如果关系表达式的值为true就执行语句体1,如果关系表达式的值为false就执行语句体2
3)继续执行后面的语句内容
应用示例:
//需求:判断两个数a,b的大小,如果a大于b,则输出a,否则就输出b
int a = 10;
int b = 20;
if(a>b){
System.out.println("a=" + a);
}else{
System.out.println("b=" + b);
}
2.switch语句
格式:switch(条件表达式){
case 值1:语句体;break;
case 值2:语句体1;break;
...
default:语句体n+1;[break]
}
格式说明:
- 表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以使String;
- case:后面跟的是要和表达式进行比较的值;
- break:表示中断、结束的意思,用来结束switch语句;
- default:表示所有情况都不匹配的时候,句执行该处的内容,与if语句的else相似。
应用示例
//需求:从键盘获取一个月份,使用switch语句判断该月份是什么季节,如果输入的月份格式不对,输出错误信息
Scanner sc = new Scanner(System.in);
System.out.print("请输入月份:");
int month = sc.nextInt();
switch (month){
case 1:{
System.out.println(month + "月份是冬季");
break;
}
case 2:{
System.out.println(month + "月份是冬季");
break;
}
case 3:{
System.out.println(month + "月份是春季");
break;
}
case 4:{
System.out.println(month + "月份是春季");
break;
}
case 5:{
System.out.println(month + "月份是春季");
break;
}
case 6:{
System.out.println(month + "月份是夏季");
break;
}
case 7:{
System.out.println(month + "月份是夏季");
break;
}
case 8:{
System.out.println(month + "月份是夏季");
break;
}
case 9:{
System.out.println(month + "月份是秋季");
break;
}
case 10:{
System.out.println(month + "月份是秋季");
break;
}
case 11:{
System.out.println(month + "月份是秋季");
break;
}
case 12:{
System.out.println(month + "月份是冬季");
break;
}
default:{
System.out.println("你输入的月份格式不对");
}
}
注意事项:在switch语句中,如果case控制的语句体后面不写break,将会出现穿透现象,在不判断下一个case值的情况下,向下运行知道遇到break,或者整体switch语句结束。如下main代码所示:
switch (month){
case 1:
case 2:
case 12:{
System.out.println(month + "月是冬季");
break;
}
case 3:
case 4:
case 5:{
System.out.println(month + "月是春季");
break;
}
case 6:
case 7:
case 8:{
System.out.println(month + "月是夏季");
break;
}
case 9:
case 10:
case 11:{
System.out.println(month + "月是秋季");
break;
}
default:{
System.out.println("输入的月份不正确");
}
}
本段代码与上一段代码的运行效果一模一样,假如输入的month值为1,则会执行case 1,然后执行case 2,再执行case 12,直到遇到了case 12中的break语句跳出switch;
switch和if语句的区别:
- 所有的switch语句都能改写成if语句,但不是所有的if语句不一定能改写成switch语句;
- 如果只有几个限定的几个取值,用switch语句结构比较清晰;
- 等值判断的时候用swi,范围判断的时候用if。
-
循环结构
特征:
重复做同样的事情,具有明确的开始和结束条件
组成:
初始化语句:用于表示循环开启的起始状态,简单说就是循环开始的时候什么样
条件判断语句:用于表示玄幻反复执行的条件,简单说就是判断循环是否能一直执行下去
循环体语句:用于表示循环反复执行的内容,简单说就是循环反复执行的事情
条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
循环结构对应的语法:
初始化语句:这里可以使一条或者多条语句,这些语句可以完成一些初始化操作
条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体,例如:a<3
循环体语句:这里可以使任意语句,这些语句将反复执行
小件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果,常见i++,i--这样的操作
1.for循环结构
格式:
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
执行流程:
(1) 执行初始化语句
(2) 执行条件判断语句,看其结果是true还是false,如果是false,循环结束;如果是true,继续执行
(3) 执行循环体语句
(4) 执行条件控制语句
(5) 回到(2)继续执行
for循环语句执行的流程图:
应用示例:
/*
求出所有的水仙花数,水仙花数:一个三位数,它的各个位上的三次方的和刚好等于这个数,例如:153 = 1*1*1+5*5*5+3*3*3
*/
for (int num = 100; num < 1000; num++) {
int ge = num % 10; //个位
int shi = num / 10 % 10; //十位
int bai = num / 100 % 10; //百位
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == num){
System.out.print(num + " ");
}
}
2.while循环结构
基本格式:
while(条件判断语句){
循环体语句;
}
完整格式:
初始化条件语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
执行流程:
(1) 执行初始化语句
(2) 执行条件判断语句,看其结果是true还是false,如果是false,循环结束;如果是true,继续执行
(3) 执行循环体语句
(4) 执行条件控制语句
(5) 回到(2)继续执行
while循环语句执行的流程图:
应用示例:
/*
求出所有的水仙花数,水仙花数:一个三位数,它的各个位上的三次方的和刚好等于这个数,例如:153 = 1*1*1+5*5*5+3*3*3
*/
int num = 100;
while(num<1000) {
int ge = num % 10; //个位
int shi = num / 10 % 10; //十位
int bai = num / 100 % 10; //百位
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == num){
System.out.print(num + " ");
}
num++;
}
3.dowhile循环结构
基本格式:
do{
循环体语句;
}while(条件判断语句);
完整格式:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
执行流程:
(1) 执行初始化语句
(2) 执行循环体语句
(3) 执行条件控制语句
(4) 执行条件判断语句,看其结果是true还是false,如果是false,循环结束;如果是true,继续执行
(5) 回到(2)继续执行
while循环语句执行的流程图:
应用示例:
/*求1-100整数的和 */
int num = 1;
int sum = 0;
do{
sum += num;
num++;
}while(num<=100);
System.out.println("sum=" + sum);
三种循环的区别:
1. for循环和while训话先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
2. do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
for和while的区别:
条件控制语句控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问
条件控制语句所控制的自增变量,对于while循环来书不归属其语法结构中,在while循环结构后,该变量还可以继续访问
死循环格式: for(;;){}、while(true){}、do{}while(true);
在命令提示符窗口中可以使用Ctrl+C结束死循环