跳转到内容

流程控制

流程控制

if-else

if 语句

if 语句的格式如下:

if(布尔表达式){
// 如果条件为 true,则执行这块代码
}

来写个示例:

int age = 20;
if (age < 30) {
System.out.println("青春年华");
}
// 输出:青春年华

if-else 语句

if-else 语句的格式如下:

if(布尔表达式){
// 条件为 true 时执行的代码块
}else{
// 条件为 false 时执行的代码块
}

来写个示例:

int age = 31;
if (age < 30) {
System.out.println("青春年华");
} else {
System.out.println("而立之年");
}
// 输出:而立之年
// 判断闰年(被 4 整除但不能被 100 整除或者被 400 整除)
int year = 2020;
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
System.out.println("闰年");
} else {
System.out.println("普通年份");
}
// 输出:闰年

如果执行语句比较简单的话,可以使用三元运算符来代替 if-else 语句,如果条件为 true,返回 ? 后面 : 前面的值;如果条件为 false,返回 : 后面的值。

int num = 13;
String result = (num % 2 == 0) ? "偶数" : "奇数";
System.out.println(result);
// 输出:奇数

if-else-if 语句

if-else-if 语句的格式如下:

if(条件1){
// 条件1 为 true 时执行的代码
}else if(条件2){
// 条件2 为 true 时执行的代码
}
else if(条件3){
// 条件3 为 true 时执行的代码
}
...
else{
// 以上条件均为 false 时执行的代码
}

来写个示例:

int age = 31;
if (age < 30) {
System.out.println("青春年华");
} else if (age >= 30 && age < 40 ) {
System.out.println("而立之年");
} else if (age >= 40 && age < 50 ) {
System.out.println("不惑之年");
} else {
System.out.println("知天命");
}
// 输出:而立之年

if 嵌套语句

if 嵌套语句的格式如下:

if(外侧条件){
// 外侧条件为 true 时执行的代码
if(内侧条件){
// 内侧条件为 true 时执行的代码
}
}

来写个示例:

int age = 20;
boolean isGirl = true;
if (age >= 20) {
if (isGirl) {
System.out.println("女生法定结婚年龄");
}
}
// 输出:女生法定结婚年龄

switch 语句

switch 语句用来判断变量与多个值之间的相等性。变量的类型可以是:

  • byte、short、char、int:基本整数类型。
  • String:字符串类型。
  • 枚举类型:自定义的枚举类型。
  • 包装类:如 Byte、Short、Character、Integer。

来看一下 switch 语句的格式:

switch(变量) {
case 可选值1:
// 可选值1匹配后执行的代码;
break; // 该关键字是可选项
case 可选值2:
// 可选值2匹配后执行的代码;
break; // 该关键字是可选项
......
default: // 该关键字是可选项
// 所有可选值都不匹配后执行的代码
}
  • 变量可以有 1 个或者 N 个值。
  • 值类型必须和变量类型是一致的,并且值是确定的。
  • 值必须是唯一的,不能重复,否则编译会出错。
  • break 关键字是可选的,如果没有,则执行下一个 case,如果有,则跳出 switch 语句。
  • default 关键字也是可选的。

来个示例:

int age = 20;
switch (age) {
case 20 :
System.out.println("上学");
break;
case 24 :
System.out.println("苏州工作");
break;
case 30 :
System.out.println("洛阳工作");
break;
default:
System.out.println("未知");
break; // 可省略
}
// 输出:上学

当两个值要执行的代码相同时,可以把要执行的代码写在下一个 case 语句中,而上一个 case 语句中什么也没有,来看一下示例:

String name = "沉默王二";
switch (name) {
case "詹姆斯":
System.out.println("篮球运动员");
break;
case "穆里尼奥":
System.out.println("足球教练");
break;
case "沉默王二":
case "沉默王三":
System.out.println("乒乓球爱好者");
break;
default:
throw new IllegalArgumentException(
"名字没有匹配项");
}
// 输出:乒乓球爱好者

枚举作为 switch 语句的变量也很常见,来看例子:

public class SwitchEnumDemo {
public enum PlayerTypes {
TENNIS,
FOOTBALL,
BASKETBALL,
UNKNOWN
}
public static void main(String[] args) {
System.out.println(createPlayer(PlayerTypes.BASKETBALL));
}
private static String createPlayer(PlayerTypes playerType) {
switch (playerType) {
case TENNIS:
return "网球运动员费德勒";
case FOOTBALL:
return "足球运动员C罗";
case BASKETBALL:
return "篮球运动员詹姆斯";
case UNKNOWN:
throw new IllegalArgumentException("未知");
default:
throw new IllegalArgumentException(
"运动员类型: " + playerType);
}
}
}
// 输出:篮球运动员詹姆斯

但 switch 不支持 long、float、double 类型,这是因为:

  • long 是 64 位整数,不在 switch 一开始设计的范围内(32 位的 int 在大多数情况下就够用了)。
  • float 和 double 是浮点数,浮点数的比较不如整数简单和直接,存在精度误差。

for 循环

普通 for 循环

普通的 for 循环可以分为 4 个部分:

1)初始变量:循环开始执行时的初始条件。

2)条件:循环每次执行时要判断的条件,如果为 true,就执行循环体;如果为 false,就跳出循环。当然了,条件是可选的,如果没有条件,则会一直循环。

3)循环体:循环每次要执行的代码块,直到条件变为 false。

4)自增/自减:初始变量变化的方式。

来看一下普通 for 循环的格式:

for(初始变量;条件;自增/自减){
// 循环体
}

来个示例:

for (int i = 0; i < 5; i++) {
System.out.println("沉默王三好美啊");
}
// 输出:
// 沉默王三好美啊
// 沉默王三好美啊
// 沉默王三好美啊
// 沉默王三好美啊
// 沉默王三好美啊

for-each

for-each 循环通常用于遍历数组和集合,它的使用规则比普通的 for 循环还要简单,不需要初始变量,不需要条件,不需要下标来自增或者自减。来看一下语法:

for(元素类型 元素 : 数组或集合){
// 要执行的代码
}

来看一下示例:

String[] strs = {"沉默王二", "一枚有趣的程序员"};
for (String str : strs) {
System.out.println(str);
}
// 输出:
// 沉默王二
// 一枚有趣的程序员

无限 for 循环

一旦运行起来,就停不下来了,除非强制停止。

for(;;){
System.out.println("停不下来。。。。");
}

while 循环

来看一下 while 循环的格式:

while(条件){
//循环体
}

来个示例:

int i = 0;
while (true) {
System.out.println("沉默王三");
i++;
if (i == 5) {
break;
}
}

do-while 循环

来看一下 do-while 循环的格式:

do{
// 循环体
}while(条件);

来个示例:

int i = 0;
do {
System.out.println("沉默王三");
i++;
if (i == 5) {
break;
}
} while (true);

break

break 关键字通常用于中断循环或 switch 语句,它在指定条件下中断程序的当前流程。如果是内部循环,则仅中断内部循环。

可以将 break 关键字用于所有类型循环语句中,比如说 for 循环、while 循环,以及 do-while 循环。

用在 for 循环中的示例:

for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}

用在嵌套 for 循环中的示例:

for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
break;
}
System.out.println(i + " " + j);
}
}

用在 while 循环中的示例:

int i = 1;
while (i <= 10) {
if (i == 5) {
i++;
break;
}
System.out.println(i);
i++;
}

用在 do-while 循环中的示例:

int j = 1;
do {
if (j == 5) {
j++;
break;
}
System.out.println(j);
j++;
} while (j <= 10);

用在 switch 语句中的示例:

switch (age) {
case 20 :
System.out.println("上学");
break;
case 24 :
System.out.println("苏州工作");
break;
case 30 :
System.out.println("洛阳工作");
break;
default:
System.out.println("未知");
break; // 可省略
}

continue

当我们需要在 for 循环或者 (do)while 循环中立即跳转到下一个循环时,就可以使用 continue 关键字,通常用于跳过指定条件下的循环体,如果循环是嵌套的,仅跳过当前循环。

来个示例:

for (int i = 1; i <= 10; i++) {
if (i == 5) {
// 使用 continue 关键字
continue;// 5 将会被跳过
}
System.out.println(i);
}

再来个循环嵌套的例子:

for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
// 当i=2,j=2时跳过
continue;
}
System.out.println(i + " " + j);
}
}

再来看一下 while 循环时 continue 的使用示例:

int i = 1;
while (i <= 10) {
if (i == 5) {
i++;
continue;
}
System.out.println(i);
i++;
}

注意:如果把 if 条件中的“i++”省略掉的话,程序就会进入死循环,一直在 continue。

最后,再来看一下 do-while 循环时 continue 的使用示例:

int i=1;
do{
if(i==5){
i++;
continue;
}
System.out.println(i);
i++;
}while(i<=10);

注意:同样的,如果把 if 条件中的“i++”省略掉的话,程序就会进入死循环,一直在 continue。