一、流程控制
1.1 概念
在一个程序执行的过程中,各条语句的执行顺序对程序的结果有直接的影响。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每一条语句的执行流程。而且,很多时候我们要通过控制语句执行顺序来实现我们要完成的功能。
1.2 顺序结构
/*
顺序结构
*/
public class Demo01Sequence {public static void main(String[] args) {System.out.println("今天天气不错");System.out.println("挺风和日丽的");System.out.println("我们下午没课");System.out.println("这的确挺爽的");}
}
二、判断语句
2.1 判断语句1——if
if(关系表达式) {语句体;
}
- 执行流程
- 首先判断关系表达式看其结果是true还是false
- 如果是true就执行语句体
- 如果是false就不执行语句体
// 单if语句
public class Demo02If {public static void main(String[] args) {System.out.println("今天天气不错,正在压马路......突然发现一个快乐的地方:网吧");int age = 16;if (age >= 18) {System.out.println("进入网吧");}System.out.println("回家吃饭");}
}
2.2 判断语句2——if..else
if(关系表达式) {语句体1;
} else {语句体2;
}
- 执行流程
- 首先判断关系表达式判断是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
// if...else
/*
if(关系表达式) {语句1;
} else {语句2;
}
*/
public class Demo03IfElse {public static void main(String[] args) {int num = 13;if (num % 2 == 0) { //如果模2运算为0,则说明是偶数System.out.println("偶数");} else {System.out.println("奇数");}}
}
2.3 判断语句3——if...else if...else
if(判断条件1) {执行语句1;
} else if (判断条件2) {执行语句2;
}
...
} else if (判断条件n) {执行语句n;
} else {执行语句n+1;
}
- 执行流程
- 首先判断关系表达式1看其结果是true还是false
- 如果是true,就执行语句1
- 如果是false就继续判断关系表达式2看其结果是true还是false
- 如果是true就执行语句体2
- ...
- 如果没有任何关系表达式true,执行语句体n+1
//if...else if...else
/*
if(判断条件1){执行语句1;
} else if (判断条件2) {执行语句2;
}
...
} else if (判断条件n) {执行语句n;
} else {执行语句n+1;
}
*/
// x和y的关系满足如下:
// 如果x >= 3,那么y = 2x + 1
// 如果-1 < x < 3,那么y = 2x
// 如果x <= -1,那么y = 2x - 1 public class Demo04IfElseExt {public static void main(String[] args) {int x = 10;int y;if (x >= 3) {y = 2 * x + 1;} else if (-1 < x && x < 3) {y = 2 * x;} else {y = 2 * x - 1;}System.out.println("结果是:" + y);}
}
2.4 if语句和三元运算符的互换
public class Demo06Max {public static void main(String[] args) {int a = 10;int b = 20;// 使用三元运算符判断最大值int max = a > b ? a : b;System.out.println(max);// 使用if语句if (a > b) {System.out.println(a);} else {System.out.println(b);}}
}
三、选择语句
3.1 选择语句--switch
switch (表达式) {case 常量值1:语句体1;break;case 数值2:语句体2;break;...default:语句体n+1;break;
}
- 执行流程
- 先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行过程中,遇到break就会结束
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉
/*
switch(表达式) {case 常量值1:语句体1;break;case 常量值2:语句体2;break;...default:语句体n+1;break;
}
*/public class Demo07Switch {public static void main(String[] args) {int num = 1;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("无效输入");}}
}
注意:
- 表达式的数据类型,可以是byte、short、int、char、enum、字符串
- 若没有break语句,程序将出现穿透现象,也就是不会判断下一个case的值,直接向后运行,知道遇到break,或者switch结束
四、循环语句
概念:循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段代码被重复执行的代码被成为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
4.1 循环语句1——for
for(初始化表达式1; 布尔表达式2; 步进表达式3){循环体4;
}
/*
循环结构的基本组成部分:一般可以分成四部分:1、初始化语句:在循环开始最初执行,而且只做唯一一次。2、条件判断:如果成立,则循环继续,如果不成立,则循环退出。3、循环体:重复要做的事情内容,若干行语句。4、步进语句:每次循环之后都要进行的扫尾工作,每次循环结束后都要执行一次。
*/
public class Demo09For {public static void main(String[] args) {for(int i = 0; i < 100; i++) {System.out.println("我错了,原谅我吧" + i);}System.out.println("程序停止");}
}
4.2 循环语句2——while
初始化表达式;
while(布尔表达式){循环体;步进表达式;
}
/*
while循环有一个标准格式,还有一个扩展模式。
标准格式:while(条件判断) {循环体;}扩展格式:初始化语句;while(条件判断){循环体;步进语句;}*/public class Demo10While {public static void main(String[] args) {int i = 1;while (i <= 100) {System.out.println("我错了" + i);i++;}}
}
4.3 循环语句3——do...while
初始化表达式;
do{循环体;步进表达式;
} while(布尔表达式);
/*
do-while循环的标准格式:do {循环体} while(条件判断);扩展格式:初始化表达式;do {循环体;步进表达式;} while(布尔表达式);*/
public class Demo11DoWhile {public static void main(String[] args) {int i = 1;do {System.out.println("我错了" + i);i++;}while(i <= 100);}
}
4.4 跳出语句
4.4.1 break
- 使用场景:终止switch或者循环
- 在选择结构switch语句中
- 在循环语句中
- 离开使用场景的存在是没有意义的
/*
break关键字的用法有常见的两种:1、可以用在switch语句中,一旦执行,整个switch语句立刻结束2、还可以用在循环语句当中,一旦执行,整个循环语句立刻循环。打断循环*/public class Demo14Break {public static void main(String[] args) {for (int i = 1; i <= 10 ; i++ ) {if(i == 4) {break;}System.out.println("Hello" + i);}}
}
4.4.2 continue
- 使用场景:结束本次循环,继续下一次的循环
/*
continue:一旦执行,立刻跳过当前循环剩余内容,马上开始下一次循环。
*/
public class Demo15Continue {public static void main(String[] args) {for (int i = 1; i <= 10 ; i++ ) {if(i == 4){continue;}System.out.println(i + "层到了。");}}
}
五、拓展
5.1 死循环
- 死循环:也就是循环中的条件永远为true,死循环是一个永不结束的循环
5.2 嵌套循环
- 指一个循环的循环体是另一个循环
public class Demo17LoopHourAndMinute {public static void main(String[] args) {for(int i = 1; i <= 24; i++) {for(int j = 0; j <= 59; j++) {System.out.println(i + "时" + j +"分");}}}
}