跳到主要内容

Java 控制流

控制流用于控制程序的执行顺序。本章将介绍条件语句和循环结构。

条件语句

if 语句

int age = 18;

if (age >= 18) {
System.out.println("你已经成年了");
}

if-else 语句

int age = 16;

if (age >= 18) {
System.out.println("你已经成年了");
} else {
System.out.println("你还未成年");
}

if-else if-else 语句

int score = 85;

if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}

嵌套条件

int age = 25;
boolean isStudent = true;

if (age >= 18) {
if (isStudent) {
System.out.println("成年学生");
} else {
System.out.println("成年非学生");
}
} else {
System.out.println("未成年");
}

三元运算符

int age = 20;
String status = age >= 18 ? "成年" : "未成年";

switch 语句

int day = 3;
String dayName;

switch (day) {
case 1:
dayName = "星期一";
break;
case 2:
dayName = "星期二";
break;
case 3:
dayName = "星期三";
break;
case 4:
dayName = "星期四";
break;
case 5:
dayName = "星期五";
break;
case 6:
dayName = "星期六";
break;
case 7:
dayName = "星期日";
break;
default:
dayName = "无效日期";
}

System.out.println(dayName);

switch 表达式(Java 14+)

int day = 3;
String dayName = switch (day) {
case 1 -> "星期一";
case 2 -> "星期二";
case 3 -> "星期三";
case 4 -> "星期四";
case 5 -> "星期五";
case 6 -> "星期六";
case 7 -> "星期日";
default -> "无效日期";
};

System.out.println(dayName);

循环

for 循环

基本语法

for (int i = 0; i < 5; i++) {
System.out.println(i); // 0, 1, 2, 3, 4
}

增强 for 循环(for-each)

int[] numbers = {1, 2, 3, 4, 5};

for (int num : numbers) {
System.out.println(num);
}

while 循环

int count = 0;

while (count < 5) {
System.out.println(count);
count++;
}

do-while 循环

int count = 0;

do {
System.out.println(count);
count++;
} while (count < 5);

死循环

// while 死循环
while (true) {
// 循环体
}

// for 死循环
for (;;) {
// 循环体
}

循环控制

break - 跳出循环

for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当 i 等于 5 时跳出循环
}
System.out.println(i); // 输出 0, 1, 2, 3, 4
}

continue - 跳过本次循环

for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // 跳过 i 等于 2 的情况
}
System.out.println(i); // 输出 0, 1, 3, 4
}

循环标签

outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) {
break outer; // 跳出外层循环
}
System.out.println("i=" + i + ", j=" + j);
}
}

实战练习

练习 1:计算 1 到 100 的和

int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1+2+...+100 = " + sum);

练习 2:打印九九乘法表

for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (i * j) + "\t");
}
System.out.println();
}

练习 3:判断素数

int num = 17;
boolean isPrime = true;

if (num < 2) {
isPrime = false;
} else {
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
isPrime = false;
break;
}
}
}

System.out.println(num + "是素数:" + isPrime);

练习 4:猜数字游戏

import java.util.Scanner;

public class GuessNumber {
public static void main(String[] args) {
int target = (int) (Math.random() * 100) + 1;
int guess = 0;
int attempts = 0;
Scanner scanner = new Scanner(System.in);

while (guess != target) {
System.out.print("请输入 1-100 的数字:");
guess = scanner.nextInt();
attempts++;

if (guess > target) {
System.out.println("猜大了!");
} else if (guess < target) {
System.out.println("猜小了!");
}
}

System.out.println("恭喜你猜对了!共用了 " + attempts + " 次");
scanner.close();
}
}

练习 5:输出菱形

int n = 5;

// 上半部分
for (int i = 1; i <= n; i++) {
for (int j = 0; j < n - i; j++) {
System.out.print(" ");
}
for (int j = 0; j < 2 * i - 1; j++) {
System.out.print("*");
}
System.out.println();
}

// 下半部分
for (int i = n - 1; i >= 1; i--) {
for (int j = 0; j < n - i; j++) {
System.out.print(" ");
}
for (int j = 0; j < 2 * i - 1; j++) {
System.out.print("*");
}
System.out.println();
}

break、continue 和 return 的区别

关键字作用说明
break跳出循环终止当前循环
continue跳过本次循环继续下一次循环
return退出方法终止当前方法的执行

小结

本章我们学习了:

  1. 条件语句(if、if-else、if-else if-else、switch)
  2. switch 表达式(Java 14+)
  3. for 循环和增强 for 循环
  4. while 和 do-while 循环
  5. 循环控制(break、continue、循环标签)
  6. 多个实战练习

练习

  1. 打印 1 到 100 中能被 3 整除的数
  2. 求斐波那契数列的前 20 项
  3. 找出 100 以内的所有素数
  4. 模拟用户登录(最多尝试 3 次)
  5. 实现一个计算器(支持加减乘除)