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");//换行
}
}
}
运行结果:
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进行自增
}
}
}
运行结果
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"); // 换行
}
}
}
运行结果:
在外层循环增加了标记“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语句也可以通过标记方式结束本次外层循环。