1. 顺序结构
1.1 if语句
格式:
if (条件语句){
执行语句;
……
}
1.2 if…else语句
格式:
if (判断条件){
执行语句1
……
}else{
执行语句2
……
}
使用if…else语句时,一定要处理包含范围更小的情况
1.3 if…else if…else语句
格式:
if (判断条件1) {
执行语句1
} else if (判断条件2) {
执行语句2
}
...
else if (判断条件n) {
执行语句n
} else {
执行语句n+1
}
1.4 if语句和三目运算符之间的转换
三元运算符语法格式:
判断条件 ? 表达式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;
1.5 switch分支语句
Switch语句由一个控制表达式和多个case标签组成,与if语句不同的是,switch语句后面的控制表达式的数据类型只能是byte,short,char,int四种整数类型,枚举类型和java.lang.String类型(从java7才允许),不能是boolean类型;如果省略了case后面的break将会引发switch穿透。
格式:
switch (表达式){
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
......
case 目标值n:
执行语句n
break;
default:
执行语句n+1
break;
}
Switch语句运行机制:switch语句会先求出表达式的值,然后拿这个表达式与case标签后的值进行比较,一旦遇到相等的值,程序就开始执行case标签后的代码,不再判断与后面case,default标签是否匹配。除非遇到 break 才会结束。
Java7增强了switch语句的功能,允许switch语句的控制表达式是java.lang.String类型的变量或表达式(只能String类型,不能是StringBufferStringBuilder这两中字符串类型)。
2. 循环结构
2.1 while循环
while循环语句和选择结构if语句有些相似,都是根据条件判断来决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到条件不成立,while循环结束。while循环语句的语法结构如下:
while(循环条件){
执行语句
………
}
在上面的语法结构中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会执行。循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。
2.2 do…while循环
do…while循环语句和while循环语句功能类似,其语法结构如下:
do {
执行语句
………
} while(循环条件);
在上面的语法结构中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
与while循环不同的是:do while循环后面必须有一个分号,这个分号表明循环结束。
2.3 for循环
for循环语句是最常用的循环语句,一般用在循环次数已知的情况下。for循环语句的语法格式如下:
for(初始化表达式; 循环条件; 操作表达式){
执行语句
………
}
在上面的语法结构中,for关键字后面()中包括了三部分内容:初始化表达式、循环条件和操作表达式,它们之间用“;”分隔,{}中的执行语句为循环体。
接下来分别用①表示初始化表达式、②表示循环条件、③表示操作表达式、④表示循环体,通过序号来具体分析for循环的执行流程。具体如下:
for(① ; ② ; ③){
④
}
第一步,执行①
第二步,执行②,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步
第三步,执行④
第四步,执行③,然后重复执行第二步
第五步,退出循环
注意:
a. for循环允许同时指定多个初始化语句,循环条件也可以是一个包含逻辑运算符的表达式;
b. for循环圆括号中只有两个分号是必须的,初始化语句,循环条件,迭代语句部分都可以省略的,如果省略了循环条件,则这个循环条件默认为true,将会产生一个死循环;
c. for循环初始化语句可以放在循环之前定义。可以扩大初始化语句中所定义变量的作用范围。
2.4无限循环(死循环)
最简单无限循环格式:
while(true){}
或
for(;;){}
无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
2.5 嵌套循环
嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套for循环,格式如下:
for(初始化表达式; 循环条件; 操作表达式) {
………
for(初始化表达式; 循环条件; 操作表达式) {
执行语句
………
}
………
}
接下来通过一个练习,来实现使用“*”打印直角三角形,
如下所示:
public class ForForDemo {
public static voidmain(String[] args) {
int i, j; // 定义两个循环变量
for (i = 1; i<= 9; i++) { // 外层循环
for (j =1; j <= i; j++) { // 内层循环
System.out.print("*");// 打印*
}
System.out.print("\n");// 换行
}
}
}
运行结果如下:
*
**
***
****
*****
******
*******
********
*********
在上述代码中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印“*”,每一行的“*”个数逐行增加,最后输出一个直角三角形。由于嵌套循环程序比较复杂,下面分步骤进行详细地讲解,具体如下:
第一步,在第3行代码定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。
第二步,在第4行代码将i初始化为1,条件i <= 9为true,首次进入外层循环的循环体。
第三步,在第5行代码将j初始化为1,由于此时i的值为1,条件j <= i为true,首次进入内层循环的循环体,打印一个“*”。
第四步,执行第5行代码中内层循环的操作表达式j++,将j的值自增为2。
第五步,执行第5行代码中的判断条件j<=i,判断结果为false,内层循环结束。执行后面的代码,打印换行符。
第六步,执行第4行代码中外层循环的操作表达式i++,将i的值自增为2。
第七步,执行第4行代码中的判断条件i<=9,判断结果为true,进入外层循环的循环体,继续执行内层循环。
第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两个“*”。在内层循环结束时会打印换行符。
第九步,以此类推,在第3行会打印3个“*”,逐行递增,直到i的值为10时,外层循环的判断条件i<= 9结果为false,外层循环结束,整个程序也就结束了。
总结:
for循环和while循环的区别:
控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果想继续使用,就用while,否则使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
使用场景:
for循环适合针对一个范围判断进行操作 ,while循环适合判断次数不明确操作。
三种循环的区别:
A:do…while循环至少会执行一次循环体。
B:for循环和while循环只有在条件成立的时候才会去执行循环体,他们是可以相互转换的。
3. 控制循环结构
3.1使用break结束循环(使用场景:A:在选择结构switch语句中;B:在循环语句中)
在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出循环语句,执行后面的代码。
当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想使用break语句跳出外层循环则需要对外层循环添加标记。
3.2使用continue忽略本次循环剩下的语句(使用场景:在循环语句中)
continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。
在嵌套循环语句中,continue语句后面也可以通过使用标记的方式结束本次外层循环,用法与break语句相似
3.3使用return结束方法
return关键字并不是专门结束循环的,return的功能是结束一个方法。当一个方法执行到return语句时,这个方法将被结束。