1 顺序结构
顺序结构就是程序从上到下逐行的执行,中间没有任何判断和跳转。
2 分支结构(一):if语句
if语句使用布尔表达式或布尔值作为分支条件来进行分之控制。使用if…else语句时,总是优先把范围小的条件放在前面处理。
// logic expression是逻辑表达式,返回值必须是true或false
if (logic expression) {
// 花括号内的代码块称为条件执行体
statement...
}
// 建议不要省略if, else, else if后面的花括号,提高可读性,降低出错可能性
if (logic expression) {
statement...
} else {
statement...
}
// 中间可以有多个else if,最后的else语句可以省略
if (logic expression) {
statement...
} else if (logic expression) {
statement...
} else {
statement...
}
public static void main(String[] args) {
// 当条件执行体只有一个语句时,可以省略花括号;
// 否则如果省略花括号,那么条件执行体为if或else或else if后面的第一个分号处的语句
int b = 5;
if (b > 4)
System.out.println("b > 4");
else
// 该句是条件执行体
b--;
// 该句不是条件执行体,无论条件如何它总会执行
System.out.println("b <= 4");
}
3 分支结构(二):switch语句
/**
* switch中expression的数据类型只能是byte,short,char,int
* Java7开始允许expression的数据类型是枚举类型和java.lang.String类型
* 先对expression求值,然后依次匹配condition,遇到匹配的值就执行对应的执行体
* 如果expression的值与所有case后的值都不匹配,执行default标签后的代码块
*/
switch (expression) {
case condition1:
statement1
break;
case condition2:
statement2
break;
...
case conditionN:
statementN
break;
default:
statement
break;
// 输出结果为:夏日炎炎
public static void main(String[] args) {
String sesson = "夏天";
switch (sesson) {
case "春天":
System.out.println("春暖花开");
break;
case "夏天":
System.out.println("夏日炎炎");
break;
case "秋天":
System.out.println("秋高气爽");
break;
case "冬天":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入错误");
break;
}
}
/**
输出结果为:
春暖花开
夏日炎炎
秋高气爽
冬雪皑皑
*/
/** 省略case后的break时,一旦expression的值和某个case标签后的值匹配,程序就开始执行这个case后的代码,不再判断与后面的case,default标签的条件是否匹配,除非遇到break才结束。*/
public static void main(String[] args) {
String sesson = "春天";
switch (sesson) {
case "春天":
System.out.println("春暖花开");
//break;
case "夏天":
System.out.println("夏日炎炎");
//break;
case "秋天":
System.out.println("秋高气爽");
//break;
case "冬天":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入错误");
break;
}
}
4 循环结构(一):while循环
/**
* 循环结构的构成:
* 1. 初始化语句(init_statement):一条或多条,循环开始前执行一次
* 2. 循环条件(test_expression):boolean表达式,其值决定是否执行循环体
* 3. 循环体(body_statement):循环条件为真时,重复执行该代码块
* 4. 迭代语句(iteration_statement): 用于控制循环变量,在一次循环体执行结束后,对循环条件求值前执行
*/
/**
* while循环:
* 1. 执行初始化语句init_statement
* 2. 对test_expression求值
* 3. 如果为true,则执行循环体body_statement,再执行iteration_statement;
* 如果为false,结束循环
*/
[init_statement];
while(test_expression)
{
[body_statement];
[iteration_statement];
}
5 循环结构(二):do while循环
/**
* dowhile循环:
* 1. 执行初始化语句init_statement
* 2. 执行循环体body_statement,再执行iteration_statement
* 3. 对test_expression求值,如果为true,继续下一次循环;否则结束循环
*
* while循环与do while循环的区别:
* while循环是先判断循环条件,如果条件为真则执行循环体
* do while循环是先执行循环体再判断循环条件,如果条件为真则执行下一次循环
* do while循环至少执行1次循环体
*/
[init_statement];
do {
[body_statement];
[iteration_statement];
} while (test_expression); // 注意有分号
6 循环结构(三):for循环
/**
* for循环:
* 1. 循环执行之前,先执行init_statement,只执行1次
* 2. 对test_expression求值
* 3. 若为true,则执行循环体body_statment,再执行iteration_statment
* 如果为false,结束循环
*
* 注意:
* for循环的init_statement只能有一个语句,但可以声明多个同类型变量。
* 建议不要在循环体内修改循环变量的值,常额外定义一个变量来保存循环变量的值。
* 如果循环变量在for后的()内定义,其作用域为该for循环内有效;
* 如果想扩大循环变量的作用域,可以将其定义在for循环之前。
*/
for ([init_statement]; [test_expression]; [iteration_statment]) {
[body_statment];
}
7 循环结构(四):foreach循环
/**
* foreach循环:
* type为数组元素或集合元素的类型,variableName为形参名,foreach循环
* 自动将数组元素、集合元素依次赋给该变量,variableName是临时变量,并不是
* 数组元素。
* 不要对循环变量赋值,避免引起错误。
*/
for (type variableName : array | collection) {
[body_statement]
}
8 循环结构(五):循环的控制
// 8.1 使用break结束循环
public static void main(String[] args) {
/**
* break语句用于结束一个循环:
* 该循环的输出为:
i值为: 0
i值为: 1
i值为: 2
*/
for (int i = 0; i < 5; i++) {
System.out.println("i值为: " + i);
if (2 == i) {
// 执行该语句时将结束循环
break;
}
}
/**
* break语句用于结束外层循环:
* 该循环的输出为:
i值为: 0, j值为: 0
i值为: 0, j值为: 1
i值为: 0, j值为: 2
i值为: 1, j值为: 0
i值为: 1, j值为: 1
*/
// 定义标识符outer作为外层循环标签
outer:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
System.out.println("i值为: " + i + ", j值为: " + j);
if (1 == i && 1 == j) {
// 跳出标签outer所标识的循环
break outer;
}
}
}
}
// 8.2 使用continue忽略本次循环剩下的语句
public static void main(String[] args) {
/**
* continue语句忽略本次循环剩下语句
* 该循环的输出为:
i值为: 0
continue后的输出语句
i值为: 1
i值为: 2
continue后的输出语句
*/
for (int i = 0; i < 3; i++) {
System.out.println("i值为: " + i);
if (1 == i) {
// 忽略本次循环剩下的语句
continue;
}
System.out.println("continue后的输出语句");
}
/**
* continue使用标签
* 该循环的输出为:
i值为: 0, j值为: 0
i值为: 0, j值为: 1
i值为: 1, j值为: 0
i值为: 1, j值为: 1
i值为: 2, j值为: 0
i值为: 2, j值为: 1
*/
// 声明外层循环标签
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
System.out.println("i值为: " + i + ", j值为: " + j);
if (j == 1) {
// 忽略标签outer所指定的循环中的本次循环所剩下的语句
continue outer;
}
}
}
}
// 8.3 使用return结束循环
public static void main(String[] args) {
/**
* return无论处在多少层循环内,都可以结束最外层循环所在的方法
* 该循环的输出为:
i值为: 0, j值为: 0
return后的输出语句
i值为: 0, j值为: 1
return后的输出语句
i值为: 1, j值为: 0
return后的输出语句
i值为: 1, j值为: 1
*/
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
System.out.println("i值为: " + i + ", j值为: " + j);
if (1 == i && 1 == j) {
return;
}
System.out.println("return后的输出语句");
}
}
}