1.流程控制概念

Java程序通过通过控制语句来控制方法的执行流程,从而实现各种功能。这篇文章主要说一下选择结构和循环结构的控制语句。

Java中的流程控制结构主要有三种:

顺序结构:代码以“从上往下,依次执行”的方式执行。

选择结构:代码根据条件选择执行。

循环结构:一段代码重复执行。

三种结构的结合使用可以解决任何复杂问题。


2.选择结构语句

2.1 if语句

if语句指如果满足某种条件,就进行某种处理的逻辑语句。

1.if

`if (判断条件){ 
    执行语句;
    ……
}`

在符合条件语句时。运行执行语句内容
2.if…else…

if (判断条件){
    执行语句1
    ……
}else{
    执行语句2
    ……
}

符合判断条件时,运行执行语句1内容,否则运行执行语句2内容。
3.if…else if…

`if (判断条件1) {
    执行语句1
} else if (判断条件2) {
    执行语句2
}
...

else if (判断条件n) {
执行语句n

} else { 
 执行语句n+1 
 }`


符合判断条件1时,运行执行语句1,否则判断是否符合条件2,运行执行语句2…


2.2选择结构if语句与三元运算符的转换

三元运算符,它和if-else语句类似,语法如下:
判断条件 ? 表达式1 : 表达式2
三元运算符会得到一个结果,通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果为表达式2的值。
例如求两个数x、y中的较大者,如果用if…else语句来实现,具体代码如下:

int x = 0;
int y = 1;
int max;
if (x > y) {
    max = x;
} else {
    max = y;
}

上面的代码运行之后,变量max的值为1。其中3-8行的代码可以使用下面的三元运算来替换。
int max = x > y ? x : y;

2.3 switch语句

switch语句是一种很常见的选择语句,它和if条件语句不通,只针对某个表达式的值做出判断,从而决定程序执行哪一段代码。
语法结构:

switch (表达式){
    case 目标值1:
        执行语句1
        break;
    case 目标值2:
        执行语句2
        break;
    ......
    case 目标值n:
        执行语句n
        break;
    default:
        执行语句n+1
        break;
}

switch语句将表达式的值和和每个case中的目标值进行对比,如果匹配到了相应的值就会执行对应的case后的语句,如果找不到任何case中匹配的值,那么就会执行default后的语句。

而在switch语句中,如果多个case条件后面的执行语句是一样的,则该执行语句只需要书写一次即可。如下:

public class SwitchDemo02 {
    public static void main(String[] args) {
        int week = 2;
        switch (week) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            // 当 week 满足值 1、2、3、4、5 中任意一个时,处理方式相同
            System.out.println("今天是工作日");
            break;
        case 6:
        case 7:
            // 当 week 满足值 6、7 中任意一个时,处理方式相同
            System.out.println("今天是休息日");
            break;
        }
    }
}

3.循环结构语句

3.1 while语句

while循环语句和if语句相似,都是根据条件判断是否执行大括号内的执行语句,区别在于while语句会反复判断条件,括号内的执行语句就会执行,直到条件不成立,循环才结束。

语法结构:

while(循环条件){
执行语句
………
}

语法上,大括号内的执行语句也被称为循环体,循环体是否执行取决于小括号内的循环条件。循环条件为true,循环体就会一直执行,当前循环执行结束会继续判断循环条件是否为true,知道循环条件为false,整个循环才结束。

3.2 do…while语句

do…while语句和while语句功能类似。

语法结构:

do {
执行语句
………
} while(循环条件);

关键字do后面的大括号中的执行语句是循环体。do…while语句中,循环条件是在循环体后,这也就意味着,在do…while语句中,循环体会无条件的执行一次,然后根据循环条件来决定是否继续执行。

3.3 for语句

for循环语句也是我们最常用的循环语句,一般用在循环次数已知的情况下。

语法结构:

for(初始化表达式; 循环条件; 操作表达式){
    执行语句
    ………
}

通过语法结构可以看出,for关键字后条件小括号的内容分为三部分:初始化表达式,循环条件,操作表达式,中间以“;”分割,大括号内的执行语句为循环体。
具体实现以一个demo来分析一下:

public class ForDemo01 {
    public static void main(String[] args) {
        int sum = 0; // 定义变量sum,用于记住累加的和
        for (int i = 1; i <= 4; i++) { // i的值会在1~4之间变化
            sum += i; // 实现sum与i的累加
        }
        System.out.println("sum = " + sum); // 打印累加的和
    }
}
//运行结果
sum = 10

代码中,变量i的初始值为1,在判断条件i<=4为true的情况下会执行循环体sum +=i,执行完毕后,会执行操作表达式i++,i的值变为2后继续进行条件判断,直到i=5时,条件i<=4为false,结束循环,执行for循环后面的代码,打印:“sum=10”;

3.4 嵌套循环

嵌套循环是指在一个循环语句的循环体中再定义一个循环语句,while,do…while,for循环语句都可以进行相互嵌套,最常用的是for循环套用for循环。
语法结构:

for(初始化表达式; 循环条件; 操作表达式) {
    ………
    for(初始化表达式; 循环条件; 操作表达式) {
        执行语句
        ………
    }
    ………
}

语法结构比较直观,借由此去做一个使用“*”打印直角三角形的demo。

public class forDemo{
    public static void main(String[] arg) {
        int i,j;//定义两个循环变量
        for(i = 1; i <= 9; i++){//外层循环
            for(j = 1; j <= i; j++){//内层循环
                System.out.print("*");//打印输出
            }
            System.out.print("\n");//换行
        }
    }
}

运行结果:

java三大控制 java的三种基本控制结构_System

demo解析:
在代码中定义了两层for循环,外层循环控制打印次数,内层循环用于打印“”,每一行的“*”的个数都是逐行增加,最后输出一个直角三角形。具体循环过程如下:
1.定义两个循环遍历,i和j,其中i为外层循环变量,j为内层循环变量。
2.在外层循环中,i的初始化为1,条件i<=9为true,首次进入外层循环的循环体。
3.在内层循环中,j的初始化为1,由于此时i的值为1,条件j<=i为true,首次进入内层循环的循环体。
4.在内层循环中执行操作表达式j++,将j的值自增为2,循环执行判断条件,j<=i结果为false,内层循环结束,跳出循环打印换行符。
5.在外层循环中执行操作表达式i++,将i的值自增为2,循环执行判断条件,i<=9为true,进入循环体执行内层循环。
6.由于i的值为2,内层循环会执行两次,即在第二行中,会打印两个“*”,内层循环结束时会打印换行符。
7.以此类推,第三行会打印三个“*”,逐行递增,知道i=10,外层循环判断i<=9的结果为false,外层循环结束,整个程序也就结束。

4.跳转语句

跳转语句是用于实现循环执行过程中程序的流程的跳转。

4.1 break语句

在switch条件语句中和循环语句中都可以使用break语句。在switch中,break用来终止某个case并跳出switch;在循环语句中用作跳出循环,执行循环外的代码。再来一个demo。

public class BreakDemo {
    public static void main(String[] args) {
        int x = 1; // 定义变量x,初始值为1
        while (x <= 4) { // 循环条件
            System.out.println("x = " + x); // 条件成立,打印x的值
            if (x == 3) {
                break;
            }
            x++; // x进行自增
        }
    }
}

运行结果

java三大控制 java的三种基本控制结构_System_02


demo中。通过while循环打印x的值,当x的值为3时使用break语句跳出循环,因此打印结果没有“x=4”。

4.2 标记

当break语句出现嵌套循环中的内层循环时,它只能跳出内层循环,如果想使用break语句跳出外层循环则需要对外层添加标记,将3.4中的demo修改一下,控制程序打印四行“*”。

public class BreakDemo02 {
    public static void main(String[] args) {
        int i, j; // 定义两个循环变量
        itcast: for (i = 1; i <= 9; i++) { // 外层循环
            for (j = 1; j <= i; j++) { // 内层循环
                if (i > 4) { // 判断i的值是否大于4
                    break itcast; // 跳出外层循环
                }
                System.out.print("*"); // 打印*
            }
            System.out.print("\n"); // 换行
        }
    }
}

运行结果:

java三大控制 java的三种基本控制结构_while语句_03

在外层循环增加了标记“itcast”,当i>4时,使用break itcast语句跳出外层循环,打印四行“*”。

4.3 continue语句

continue语句在循环语句中的作用是终止本次循环,执行下一次循环。
demo是1-100之内奇数求和

public class ContinueDemo {
    public static void main(String[] args) {
        int sum = 0; // 定义变量sum,用于记住和
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) { // i是一个偶数,不累加
                continue; // 结束本次循环
            }
            sum += i; // 实现sum和i的累加
        }
        System.out.println("sum = " + sum);
    }
}
运行结果:sum=2500

代码中使用for循环让变量i在1-100之间循环,在循环过程中,i为偶数时,执行continue语句结束循环进入下一次循环,当i为奇数时,sum和i累加,最终得到1-100奇数之和。
嵌套循环语句中,continue语句也可以通过标记方式结束本次外层循环。