做任何事情都要遵循一定的原则。程序设计也是如此,需要利用流程控制实现与用户的交流,并根据用户的需求决定程序 “做件么” “怎么做”。
顺序结构 如果没有特别指明,程序就按照顺序一句一句顺序执行。
选择结构 按照条件执行相应的语句体,没有则不执行。
循环结构 循环执行某个语句体,直至不满足条件为止。
注意: ① 死循环:条件永远成立 ,循环永不结束。 ② 嵌套循环:循环内还有循环。
if 语句使用布尔表达式或布尔值作为分支条件来进行分支控制。
语法:
if ( 条件 ) {
// 条件成立,执行语句体
语句体;
}
示例:
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 1;
if (a == b) {
System.out.println("a = b");
}
if (a == c) {
System.out.println("a = c");
}
if (b == c) {
System.out.println("b =c");
}
}
}
语法:
// if ··· else
if ( 条件 ) {
// 条件成立,执行语句体1
语句体1;
} else {
// 否则,执行语句体2
语句体2;
}
示例:
// if ··· else
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
if (a == b) {
System.out.println("a = b");
}else {
System.out.println("a != b"); // a != b
}
}
}
注意: if ··· else 语句与三元运算符可以互转
语法:
// if ··· else if
if ( 条件1 ) {
// 若条件1成立,执行语句体1
语句体1;
} else if ( 条件2 ) {
// 若条件2成立,执行语句体2
语句体2;
}
······
else if ( 条件n ) {
// 若条件n成立,执行语句体n
语句体;
} else { // 最后的 else 可以省略
// 否则,执行语句体f
语句体f;
}
示例:
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 1;
int d = 1;
if (a == b) {
System.out.println("a = b");
} else if (a == c) {
System.out.println("a = c"); // a = c
} else if (a == d) {
System.out.println("a = d"); // 不执行
} else {
System.out.println("a != b && a != c && a != d");
}
}
}
注意: if ··· else if 语句当满足了某一个条件后不在判断是否满足其他条件
if、else、else if 后的条件执行体要么是一个花括号括起来的代码块,则这个代码块整体作为条件执行体;要么是以分号为结束符的一行语句,甚至可能是一个空语句(空语句是一个分号),那么就只是这条语句作为条件执行体。如果省略了 if 条件后条件执行体的花括号,那么 if 条件只控制到紧跟该条件语句的第一个分号处。
switch 语句由一个控制表达式和多个 case 标签组成,和 if 语句不同的是,switch 语句后面的控制表达式的数据类型只能是 byte、short、char、int 四种整数类型,枚举类型和 String 类型(Java 1.7),不能是 boolean 类型。
语法:
switch ( 条件 ) {
// 判断 条件 满足那个 case 则执行哪一个 case 中的语句
case 条件1 :{
语句1;
break;
}
case 条件2 :{
语句2;
break;
}
···
case 条件n :{
语句n;
break;
}
// 都不满足则执行 default 中的一句(可省略)
default :{
语句;
break;
}
}
示例:
public class Test {
public static void main(String[] args) {
int a = 1;
switch (a) {
case 1 : {
System.out.println("a = 1"); // a = 1
break;
}
case 2 : {
System.out.println("a = 2");
break;
}
default:{
System.out.println("没有满足的条件");
break;
}
}
}
}
注意: case 具有穿透性,所以 case 后必须跟 break 使其跳出 switch,否则将会不断执行下一个 case 直至遇到 break 或者执行完 switch。
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体。当反复执行这个循环体时,需要在合适的时候把循环条件改为 false,从而结束循环,否则循环将一直执行下去,形成死循环。循环结构可能包含如下4个部分: ♞ 初始化语句:一条或多条语句,这些语句用于完成一些初始化工作,初始化语句在循环开始之前执行。 ♞ 循环条件:这是一个 boolean 表达式,这个表达式能决定是否执行循环体。 ♞ 循环体:这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行。如果这个代码块只有一行语句,则这个代码块的花括号是可以省略的。 ♞ 迭代语句:这个部分在一次循环体执行结束后,对循环条件求值之前执行,通常用于控制循环条件中的变量,使得循环在合适的时候结束。
while 语句的循环方式是通过一个条件来控制是否要继续反复执行这个语句。
语法:
// 直到不满足条件退出循环
初始化表达式;
while ( 循环条件 ) {
语句体;
}
示例:
public class Test {
public static void main(String[] args) {
int i = 0;
while (i < 5) {
System.out.println(i); // 0 1 2 3 4
i++;
}
}
}
do…while 循环语句与 while 循环语句类似,它们之间的区别是 while 语句先判断条件是否成立再执行循环体,而 do…while 循环语句则先执行一次循环后,再判断条件是否成立。也就是说 do…while 循环体至少要被执行一次。
语法:
// 首先执行一次循环体 再判断是否满足条件
初始化表达式;
do {
语句体1;
}while ( 循环条件 );
示例:
public class Test {
public static void main(String[] args) {
int i = 0;
do {
System.out.println(i); // 0
i++;
}while (i < 0);
}
}
for 循环是更加简洁的循环语句,大部分情况下,for 循环可以代替 while 循环、do while 循环
语法:
// 不满足循环条件时退出循环
for ( 初始化表达式; 循环条件; 步进表达式 ) {
语句体;
}
示例:
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(i); // 0 1 2 3 4
}
}
}
break : 终止循环; continue:终止本次循环进入下一次循环 如果知道循环次数用 for,不知道循环次数用 while。