目录
一、前言
二、选择语句
1、if语句:单分支条件判断
2、if-else语句:双分支条件判断
3、if-else-if-else语句:多分支条件判断
4、嵌套if--else
5、switch语句
6、if-else语句与switch语句的比较
三、迭代(循环)语句
1、while语句
2、do-while语句
4、for-in 语法
5、迭代(循环语句比较)
6、嵌套循环
四、跳转语句
1、break:
2、continue:
3、return:
流程控制语句,是根据程序的状态变化,引导程序的执行流程与分支。java程序控制语句主要分为选择、迭代(循环)、和跳转语句
选择语句:允许程序根据条件表达式的输出结果(true或false)或变量的状态,选择程序不同的执行路径,包括if、switch语句
迭代(循环)语句:可以使程序逻辑重复执行一条或多条语句,直到起控制作用布尔表达式结果变为false,循环即结束。包括while、do-while、for
跳转语句:使程序能够以非线性的方式来执行。包括break、continue和return
1)、语法格式:
if(条件表达式){
statement1语句块;
}
2)、说明: 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或布尔变量
3)、执行流程:
4)、应用举例:
int heartBeats = 89;
if(heartBeats < 60 || heartBeats > 100){
System.out.println("需要进一步检查");
}
1)、语法格式:
if(条件表达式){
statement1语句块;
}else{
statement2语句块;
}
2)、说明:条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或布尔变量
3)、执行流程:
4)、应用举例:
//判断一个数是奇数还是偶数
int count = 15;
if(count%2==0){
System.out.println("这是一个奇数");
}else{
System.out.println("这是一个偶数");
}
1)、语法格式:
if (条件表达式1) {
statement1语句块;
} else if (条件表达式2) {
statement2语句块;
}
.......
}else if(条件表达式n){
statement(n)语句块;
}else{
statement(n+1)语句块;
}
2)、说明:当某个条件表达式为 true,则进入执行相应的语句块。执行完对应的语句块之后,则跳出当前结构
3)、执行流程:
int score = 80;
if(score == 100){
System.out.println("优秀");
}else if(score > 80 && score <= 99){
System.out.println("良好");
}else if(score >= 60 && score <= 80){
System.out.println("合格");
} else{
System.out.println("不合格");
}
特别提醒:语句块可以是单条语句,也可以是复合语句,如果语句块是单条语句,那么{}可以省略,若是符合语句,则不可省略。为了程序的可读性,建议不管何种情况不要省略{}。如:
int byteAvailable;
int a = 0;
if(a>0){
statement1;
}else
statement1;
byteAvailable =10;
该代码块中else部分未加{}括号,其中 byteAvailable=10语句的边界则不清楚,该语句是在else内还是在esle外。在该段程序执行时,系统则会判定为在else以外的独立语句块。
1)、语法格式:
if(条件表达式){
if(条件表达式1){
statement语句块1
}else if(条件表达式2){
statement语句块2
}else {
statement语句块3
}
}else {
statement语句块4
}
2)、说明:在 if 的语句块中,或者是在 else 语句块中,再包含了另外一个条件判断(可以是单分支、双分支或多分支),这样就形成了if嵌套结构
3)、执行流程:
注意:在if嵌套语句中,else语句总是与位于同一代码块中最近的if语句相关联,作为其else子句。
1)、语法格式:
switch(表达式值){
case 常量值 1:
语句块 1;
break;
case 常量值 2:
语句块 2;
break;
...
default:
语句块 n+1;
break;
}
2)、说明:
注意:break标识是可选的,如果case分支中没有该标识,程序会按顺序执行直到遇到一个break标识的case分支,然后跳出 switch 语句块;
switch语句的三个重要特征
3)、执行流程:
4)、应用举例:
String season = "summer";
switch (season) {
case "spring":
System.out.println("春暖花开");
break;
case "summer":
System.out.println("夏日炎炎");
break;
case "autumn":
System.out.println("秋高气爽");
break;
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
执行结果:控制台输出 --> 夏日炎炎
String season = "spring";
switch (season) {
case "spring":
System.out.println("春暖花开");
case "summer":
System.out.println("夏日炎炎");
case "autumn":
System.out.println("秋高气爽");
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
执行结果:控制台输出 -->
春暖花开
夏日炎炎
秋高气爽
冬雪皑皑
if 语句的条件是一个布尔类型值,if 条件表达式为 true 则进入分支,可以用于范围的判断,也可以用于等值的判断,其使用范围更广。
switch 语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式的结果是否等于某个常量值,使用场景有限制。
当条件是判断某个变量或表达式是否等于某个固定的常量值时,使 用 if 和 switch 都可以,建议使用switch
当条件是区间范围的判断时,只能使用 if 语句。
使用 switch 可以利用穿透性,同时执行多个分支,而 if...else 没有穿透性。
1)、语法格式:
①初始化语句
while(②循环条件表达式判断){
③循环体执行语句块;
④迭代标识累加;
}
2)、说明:
3)、执行流程: ①-②-③-④-②-③-④-②-③-④-...-②
4)、应用举例
//遍历 1-50 的偶数,并计算所有偶数的和、偶数的个数
int num = 1;
int sum = 0;//记录 1-100 所有的偶数的和
int count = 0;//记录 1-100之间偶数的个数
while(num <= 50){
if(num % 2 == 0){
System.out.println(num);
sum += num;
count++;
}
num++;//迭代条件
}
System.out.println("偶数的总和为:" + sum);
System.out.println("偶数的个数为:" + count);
1)、语法格式:
①初始化语句;
do{
③循环体执行语句块
④迭代标识累加
}while(②循环条件表达式判断);
2)、说明:
3)、执行流程: ①-③-④-②-③-④-②-③-④-...-②
4)、应用举例
int num2 = 5;
do{
System.out.println("hello:do-while");
num2--;
}while(num2 > 5);
1)、语法格式:
for (①初始化语句; ②循环条件部分表达式; ④迭代标识累加){
③循环体语句块;
}
2)、说明:
3)、执行流程:
①-②-③-④-②-③-④-②-③-④-.....-②
4)、应用举例
//循环遍历输出1-100以内的偶数
for(int i = 1;i <= 100;i++){
if(i % 2 == 0){
System.out.println(i);
}
}
5)、关于for循环中的逗号操作符
此处的逗号操作符不是逗号分隔符,逗号分隔符用来分隔声明和函数的不同参数,在Java中唯一用到逗号操作符的地方就是foi循环的控制表达式;在控制表达式的初始化和迭代标识累加部分,都可以使用一系列由逗号分隔的语句,而这些语句会按先后顺序执行
通过使用逗号操作符,你可以在和1语句里定义多个变虽,但它们必须是相同的类型,如:
for(int i = 1, j = i + 10; i < 5; i++, j = i * 2){
System.out.printIn("i=" + i + "j=" + j);
}
在以上for语句里的int参数定义包括i和j,在初始化部分可以定义同一个类型的任意数量的变量。在控制表达式里定义多个变量的能力只限于以上for循环,在其他任何选择或迭代语句中都不能使用这种方式。
在JDK1.5中引入了一种更加简洁的for语法,可以用于数组和容器(集合),这种语法就是通常所说的"増强的for循环",或叫做"foreach"语法,
该语法仅能用于对数组和容器(集合)的迭代,对于for(int i = 1;i <= 100;i++){}这样存在迭代累加的场景,for-in语法不起作用,
语法格式:
for(Object 变量 : 数组或集合对象) {
}
应用举例
List list = Arrays.asList("01_贷款","02_贴现","03_承兑","04_保函","05_信用证");
for (String str : list) {
System.out.println(str);
}
String[] arrays = {"01_贷款","02_贴现","03_承兑","04_保函","05_信用证"};
for (String element : arrays) {
System.out.println(element);
}
三种循环结构都具有四个要素:
从循环次数角度分析
在实际应用场景该如何选择
所谓嵌套循环:是指在一个循环结构 A 的循环体语句块是另一个循环结构 B。如for 循环里面还有一个 for 循环,就是嵌套循环。
本质上,嵌套循环就是把内层循环当成外层循环的循环体。只有当内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的外层循环。
假如设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次。
在实际工作中,常见的嵌套循环是两层。一般不会出现超过三层的嵌套循环。如果超过三层的嵌套循环,会降低程序的可读性。如果在实际操作中,真正的出现了超过三层嵌套的情况,那么需要重新梳理业务逻辑,重新设计算法的实现,控制在三层以内
双层for循环应用举例
//输出九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + (i * j) + "\t");
}
System.out.println();
}
1)、break的三种用途
如下代码片段: :从键盘输入星期的整数值,输出星期的英文单词。当输入的值满足某个case的值时,输出对应的星期几,然后使用break,终止其他case分支的执行。
Scanner input = new Scanner(System.in);
int weekday = input.nextInt();
switch(weekday) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("你输入的星期值有误!");
break;
}
如下代码片段:原意是while要循环100次,输出0-99的数,但在输出9的数字后,通过break强制终止循环体的执行,使后续的数字不在输出。
int i =0;
while(i<100){
if(i==10){
break;
}
System.out.print( " "+i);
i++;
}
outer: for (int i=0;i<5;i++){
System.out.println("Pass" + i +":");
for (int k=0;k<100;k++){
if(k==10){
break outer;
}
System.out.print( k+" ");
}
System.out.println("This will not print");
}
System.out.println("Loops complete");
执行结果:Pass0:
0 1 2 3 4 5 6 7 8 9 Loops complete
特别提示:break最初的设计目的并不是用来终止循环的正常手段,终止循环的循环中条件表达式要做的事。只有当发生某些特殊情况时,使用break语句强制终止循环的执行。
有时在程序执行时,需要提前终止循环的一次迭代,但是希望整个循环能继续运行,从循环控制的角度来说,就是希望程序跳过循环体,继续执行条件表达式。同时continue与break一样,也可以指定标签
1)、提前终止循环的一次迭代
for (int i=0;i<10;i++){
System.out.println( i +" ");
if(i%2==0){
continue;
}
System.out.println(" ");
}
2)、指定标签
outer: for (int i=0;i<10;i++){
for (int j=0;j<10;j++){
if(j>i){
System.out.println();
continue outer;
}
System.out.print(" "+(i * j));
}
}
System.out.println();
return语句表示要显示地从方法返回,即return语句导致程序的执行控制转移给方法的调用者。
注意:在方法中,在return的关键字后面,不能在声明其他的执行语句,否则将报编译错误。