Java学习笔记03:流程控制语句

Java学习笔记03:流程控制语句

一、本章学习目标

本章主要学习 Java 中的流程控制语句。

程序默认是从上到下顺序执行的,但在实际开发中,经常需要根据条件选择不同的执行路径,或者让某段代码重复执行多次。

学完本章后,需要掌握以下内容:

  1. 理解程序的三种基本结构;
  2. 掌握 if 分支语句;
  3. 掌握 switch 分支语句;
  4. 掌握 for 循环;
  5. 掌握 while 循环;
  6. 掌握 do-while 循环;
  7. 掌握 break、continue、return 的作用;
  8. 能够使用流程控制语句完成简单案例。

二、程序的三种基本结构

Java 程序中常见的流程结构包括三种:

text 复制代码
1. 顺序结构
2. 分支结构
3. 循环结构

1. 顺序结构

顺序结构是最简单的程序结构。

程序按照代码书写顺序,从上到下依次执行。

示例:

java 复制代码
public class SequenceDemo {
    public static void main(String[] args) {
        System.out.println("第一步:打开冰箱");
        System.out.println("第二步:把大象放进去");
        System.out.println("第三步:关上冰箱");
    }
}

运行结果:

text 复制代码
第一步:打开冰箱
第二步:把大象放进去
第三步:关上冰箱

2. 分支结构

分支结构用于根据不同条件执行不同代码。

常见分支语句有:

text 复制代码
if
if-else
if-else if-else
switch

3. 循环结构

循环结构用于重复执行某段代码。

常见循环语句有:

text 复制代码
for
while
do-while

三、if 语句

1. if 语句基本格式

java 复制代码
if (条件表达式) {
    条件成立时执行的代码;
}

执行流程:

text 复制代码
如果条件表达式为 true,则执行大括号中的代码;
如果条件表达式为 false,则跳过大括号中的代码。

2. if 语句示例

java 复制代码
public class IfDemo01 {
    public static void main(String[] args) {
        int age = 20;

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

运行结果:

text 复制代码
已经成年

3. if 语句注意事项

1)条件表达式结果必须是 boolean 类型

正确写法:

java 复制代码
int age = 20;

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

错误写法:

java 复制代码
int age = 20;

if (age) {
    System.out.println("成年");
}

Java 中不能直接把整数当作条件。


2)如果 if 后面只有一条语句,可以省略大括号
java 复制代码
public class IfDemo02 {
    public static void main(String[] args) {
        int age = 20;

        if (age >= 18)
            System.out.println("成年");
    }
}

虽然可以省略,但不推荐。

推荐写法:

java 复制代码
public class IfDemo03 {
    public static void main(String[] args) {
        int age = 20;

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

原因:

text 复制代码
加上大括号,代码结构更清晰,也能减少出错。

四、if-else 语句

1. if-else 基本格式

java 复制代码
if (条件表达式) {
    条件成立时执行的代码;
} else {
    条件不成立时执行的代码;
}

2. 示例:判断是否成年

java 复制代码
public class IfElseDemo01 {
    public static void main(String[] args) {
        int age = 16;

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

运行结果:

text 复制代码
未成年

3. 示例:判断奇偶数

java 复制代码
import java.util.Scanner;

public class IfElseDemo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入一个整数:");
        int num = scanner.nextInt();

        if (num % 2 == 0) {
            System.out.println(num + " 是偶数");
        } else {
            System.out.println(num + " 是奇数");
        }
    }
}

运行示例:

text 复制代码
请输入一个整数:
9
9 是奇数

五、if-else if-else 语句

1. 基本格式

java 复制代码
if (条件表达式1) {
    条件1成立时执行的代码;
} else if (条件表达式2) {
    条件2成立时执行的代码;
} else if (条件表达式3) {
    条件3成立时执行的代码;
} else {
    以上条件都不成立时执行的代码;
}

执行流程:

text 复制代码
从上到下依次判断条件;
哪个条件先成立,就执行对应代码;
执行完后,整个 if-else if-else 结构结束;
如果所有条件都不成立,则执行 else 中的代码。

2. 示例:成绩等级判断

需求:

text 复制代码
90分及以上:优秀
80分到89分:良好
70分到79分:中等
60分到69分:及格
60分以下:不及格

代码实现:

java 复制代码
import java.util.Scanner;

public class ScoreLevelDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

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

运行示例:

text 复制代码
请输入成绩:
85
良好

3. 加入数据合法性判断

上面的代码还有一个问题:

text 复制代码
如果输入 120 或 -10,也会参与判断。

更合理的写法:

java 复制代码
import java.util.Scanner;

public class ScoreLevelDemo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (score < 0 || score > 100) {
            System.out.println("成绩输入不合法");
        } else if (score >= 90) {
            System.out.println("优秀");
        } else if (score >= 80) {
            System.out.println("良好");
        } else if (score >= 70) {
            System.out.println("中等");
        } else if (score >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
    }
}

六、嵌套 if 语句

1. 什么是嵌套 if?

嵌套 if 指的是在 if 语句内部再写 if 语句。

格式:

java 复制代码
if (条件1) {
    if (条件2) {
        条件1和条件2都成立时执行;
    }
}

2. 示例:判断是否可以参加比赛

需求:

text 复制代码
年龄大于等于18岁;
成绩大于等于80分;
两个条件都满足,才可以参加比赛。

代码实现:

java 复制代码
import java.util.Scanner;

public class NestedIfDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入年龄:");
        int age = scanner.nextInt();

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (age >= 18) {
            if (score >= 80) {
                System.out.println("可以参加比赛");
            } else {
                System.out.println("成绩不达标");
            }
        } else {
            System.out.println("年龄不符合要求");
        }
    }
}

3. 更简洁写法

上面的代码可以用逻辑运算符简化:

java 复制代码
import java.util.Scanner;

public class NestedIfDemo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入年龄:");
        int age = scanner.nextInt();

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (age >= 18 && score >= 80) {
            System.out.println("可以参加比赛");
        } else {
            System.out.println("不符合参赛要求");
        }
    }
}

七、switch 语句

1. switch 基本格式

java 复制代码
switch (表达式) {
    case 值1:
        代码块1;
        break;
    case 值2:
        代码块2;
        break;
    case 值3:
        代码块3;
        break;
    default:
        默认代码块;
        break;
}

2. 执行流程

text 复制代码
1. 先计算 switch 后面表达式的值;
2. 用这个值依次和 case 后面的值进行匹配;
3. 匹配成功后,执行对应 case 中的代码;
4. 遇到 break,结束 switch;
5. 如果所有 case 都不匹配,则执行 default。

3. 示例:星期判断

java 复制代码
import java.util.Scanner;

public class SwitchDemo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入数字1-7:");
        int week = scanner.nextInt();

        switch (week) {
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("输入有误");
                break;
        }
    }
}

运行示例:

text 复制代码
请输入数字1-7:
3
星期三

4. break 的作用

break 用于结束 switch。

如果没有 break,会出现 case 穿透现象。

示例:

java 复制代码
public class SwitchDemo02 {
    public static void main(String[] args) {
        int week = 2;

        switch (week) {
            case 1:
                System.out.println("星期一");
            case 2:
                System.out.println("星期二");
            case 3:
                System.out.println("星期三");
            default:
                System.out.println("输入结束");
        }
    }
}

运行结果:

text 复制代码
星期二
星期三
输入结束

原因:

text 复制代码
case 2 匹配成功后,因为没有 break,所以继续向下执行。

5. case 穿透的合理使用

需求:

text 复制代码
输入1-5:工作日
输入6-7:休息日

代码实现:

java 复制代码
import java.util.Scanner;

public class SwitchDemo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入星期数字:");
        int week = scanner.nextInt();

        switch (week) {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("输入错误");
                break;
        }
    }
}

6. switch 支持的数据类型

switch 表达式支持的类型包括:

text 复制代码
byte
short
int
char
String
enum

注意:

text 复制代码
long、float、double、boolean 不能作为 switch 表达式类型。

八、for 循环

1. for 循环基本格式

java 复制代码
for (初始化语句; 条件判断语句; 条件控制语句) {
    循环体语句;
}

执行流程:

text 复制代码
1. 执行初始化语句;
2. 判断条件是否成立;
3. 如果条件成立,执行循环体;
4. 执行条件控制语句;
5. 再次判断条件;
6. 条件成立继续执行,条件不成立结束循环。

2. 示例:输出 5 次 Hello Java

java 复制代码
public class ForDemo01 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("Hello Java");
        }
    }
}

运行结果:

text 复制代码
Hello Java
Hello Java
Hello Java
Hello Java
Hello Java

3. 示例:输出 1 到 10

java 复制代码
public class ForDemo02 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }
    }
}

4. 示例:计算 1 到 100 的和

java 复制代码
public class ForDemo03 {
    public static void main(String[] args) {
        int sum = 0;

        for (int i = 1; i <= 100; i++) {
            sum += i;
        }

        System.out.println("1到100的和是:" + sum);
    }
}

运行结果:

text 复制代码
1到100的和是:5050

5. 示例:计算 1 到 100 的偶数和

java 复制代码
public class ForDemo04 {
    public static void main(String[] args) {
        int sum = 0;

        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                sum += i;
            }
        }

        System.out.println("1到100的偶数和是:" + sum);
    }
}

运行结果:

text 复制代码
1到100的偶数和是:2550

6. 更简洁写法

java 复制代码
public class ForDemo05 {
    public static void main(String[] args) {
        int sum = 0;

        for (int i = 2; i <= 100; i += 2) {
            sum += i;
        }

        System.out.println("1到100的偶数和是:" + sum);
    }
}

九、while 循环

1. while 基本格式

java 复制代码
初始化语句;

while (条件判断语句) {
    循环体语句;
    条件控制语句;
}

2. 示例:输出 1 到 5

java 复制代码
public class WhileDemo01 {
    public static void main(String[] args) {
        int i = 1;

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

运行结果:

text 复制代码
1
2
3
4
5

3. 示例:计算 1 到 100 的和

java 复制代码
public class WhileDemo02 {
    public static void main(String[] args) {
        int i = 1;
        int sum = 0;

        while (i <= 100) {
            sum += i;
            i++;
        }

        System.out.println("1到100的和是:" + sum);
    }
}

十、do-while 循环

1. do-while 基本格式

java 复制代码
初始化语句;

do {
    循环体语句;
    条件控制语句;
} while (条件判断语句);

注意:

text 复制代码
do-while 循环最后有一个分号。

2. 示例:输出 1 到 5

java 复制代码
public class DoWhileDemo01 {
    public static void main(String[] args) {
        int i = 1;

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

运行结果:

text 复制代码
1
2
3
4
5

3. do-while 的特点

do-while 循环的特点是:

text 复制代码
先执行一次循环体,再判断条件。

即使条件一开始就是 false,循环体也会至少执行一次。

示例:

java 复制代码
public class DoWhileDemo02 {
    public static void main(String[] args) {
        int i = 10;

        do {
            System.out.println("执行了一次");
        } while (i < 5);
    }
}

运行结果:

text 复制代码
执行了一次

十一、三种循环的区别

循环 特点 适用场景
for 循环次数明确 遍历、计数、求和
while 循环次数不一定明确 条件满足时持续执行
do-while 至少执行一次 菜单、输入校验

十二、死循环

1. 什么是死循环?

死循环是指循环条件一直成立,程序无法正常结束循环。

示例:

java 复制代码
public class DeadLoopDemo01 {
    public static void main(String[] args) {
        while (true) {
            System.out.println("这是一个死循环");
        }
    }
}

2. for 死循环

java 复制代码
public class DeadLoopDemo02 {
    public static void main(String[] args) {
        for (;;) {
            System.out.println("for 死循环");
        }
    }
}

3. 死循环的应用场景

死循环不一定都是错误。

在以下场景中,死循环很常见:

text 复制代码
服务器持续运行
菜单系统持续显示
游戏主循环
消息监听

但死循环通常需要配合 break 退出。


十三、break 语句

1. break 的作用

break 可以用于:

text 复制代码
1. 结束 switch 语句;
2. 结束当前循环。

2. 示例:循环中使用 break

java 复制代码
public class BreakDemo01 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                break;
            }

            System.out.println(i);
        }
    }
}

运行结果:

text 复制代码
1
2
3
4

i == 5 时,执行 break,循环直接结束。


3. 示例:查找第一个能被 7 整除的数

java 复制代码
public class BreakDemo02 {
    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            if (i % 7 == 0) {
                System.out.println("第一个能被7整除的数是:" + i);
                break;
            }
        }
    }
}

运行结果:

text 复制代码
第一个能被7整除的数是:7

十四、continue 语句

1. continue 的作用

continue 用于结束本次循环,继续下一次循环。

注意:

text 复制代码
continue 不是结束整个循环,而是跳过当前这一次。

2. 示例:跳过数字 5

java 复制代码
public class ContinueDemo01 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                continue;
            }

            System.out.println(i);
        }
    }
}

运行结果:

text 复制代码
1
2
3
4
6
7
8
9
10

3. 示例:输出 1 到 20 中不能被 3 整除的数

java 复制代码
public class ContinueDemo02 {
    public static void main(String[] args) {
        for (int i = 1; i <= 20; i++) {
            if (i % 3 == 0) {
                continue;
            }

            System.out.println(i);
        }
    }
}

十五、return 语句

1. return 的作用

return 用于结束当前方法。

在 main 方法中使用 return,会直接结束整个程序。

示例:

java 复制代码
public class ReturnDemo01 {
    public static void main(String[] args) {
        System.out.println("程序开始");

        return;

        // 下面这行代码不会执行
        // System.out.println("程序结束");
    }
}

运行结果:

text 复制代码
程序开始

2. return 和 break 的区别

关键字 作用
break 结束当前 switch 或当前循环
continue 结束本次循环,进入下一次循环
return 结束当前方法

十六、嵌套循环

1. 什么是嵌套循环?

嵌套循环指的是循环中再写循环。

格式:

java 复制代码
for (外层循环初始化; 外层循环条件; 外层循环控制) {
    for (内层循环初始化; 内层循环条件; 内层循环控制) {
        循环体;
    }
}

执行特点:

text 复制代码
外层循环执行一次,内层循环执行一轮。

2. 示例:输出矩形星号

需求:

text 复制代码
输出 3 行 5 列星号

代码:

java 复制代码
public class NestedLoopDemo01 {
    public static void main(String[] args) {
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 5; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

运行结果:

text 复制代码
*****
*****
*****

3. 示例:输出直角三角形

需求:

text 复制代码
*
**
***
****
*****

代码:

java 复制代码
public class NestedLoopDemo02 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

4. 示例:九九乘法表

java 复制代码
public class MultiplicationTable {
    public static void main(String[] args) {
        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();
        }
    }
}

运行结果:

text 复制代码
1×1=1	
1×2=2	2×2=4	
1×3=3	2×3=6	3×3=9	
1×4=4	2×4=8	3×4=12	4×4=16	
1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81	

十七、综合案例一:猜数字游戏

需求

程序中定义一个固定数字,让用户不断输入数字进行猜测。

规则:

text 复制代码
如果猜大了,提示"猜大了";
如果猜小了,提示"猜小了";
如果猜对了,提示"猜对了",并结束程序。

代码实现

java 复制代码
import java.util.Scanner;

public class GuessNumberGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int target = 66;

        while (true) {
            System.out.println("请输入你猜的数字:");
            int guess = scanner.nextInt();

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

运行示例

text 复制代码
请输入你猜的数字:
50
猜小了
请输入你猜的数字:
80
猜大了
请输入你猜的数字:
66
猜对了

十八、综合案例二:登录验证

需求

用户最多输入 3 次密码。

规则:

text 复制代码
正确密码是 123456;
输入正确,提示"登录成功";
输入错误,提示剩余次数;
错误 3 次后,提示"账号已锁定"。

代码实现

java 复制代码
import java.util.Scanner;

public class LoginDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String correctPassword = "123456";

        for (int i = 1; i <= 3; i++) {
            System.out.println("请输入密码:");
            String password = scanner.next();

            if (password.equals(correctPassword)) {
                System.out.println("登录成功");
                break;
            } else {
                int remain = 3 - i;

                if (remain == 0) {
                    System.out.println("账号已锁定");
                } else {
                    System.out.println("密码错误,还剩 " + remain + " 次机会");
                }
            }
        }
    }
}

代码说明

这里判断字符串是否相等,使用的是:

java 复制代码
password.equals(correctPassword)

不要写成:

java 复制代码
password == correctPassword

原因:

text 复制代码
String 是引用数据类型,判断字符串内容是否相等应使用 equals 方法。

十九、综合案例三:简易菜单系统

需求

使用循环和 switch 实现菜单系统。

菜单内容:

text 复制代码
===== 学生管理系统 =====
1. 添加学生
2. 删除学生
3. 修改学生
4. 查询学生
0. 退出系统
请输入你的选择:

代码实现

java 复制代码
import java.util.Scanner;

public class MenuDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("===== 学生管理系统 =====");
            System.out.println("1. 添加学生");
            System.out.println("2. 删除学生");
            System.out.println("3. 修改学生");
            System.out.println("4. 查询学生");
            System.out.println("0. 退出系统");
            System.out.println("请输入你的选择:");

            int choice = scanner.nextInt();

            switch (choice) {
                case 1:
                    System.out.println("执行添加学生功能");
                    break;
                case 2:
                    System.out.println("执行删除学生功能");
                    break;
                case 3:
                    System.out.println("执行修改学生功能");
                    break;
                case 4:
                    System.out.println("执行查询学生功能");
                    break;
                case 0:
                    System.out.println("退出系统");
                    return;
                default:
                    System.out.println("输入有误,请重新输入");
                    break;
            }
        }
    }
}

代码说明

这里使用:

java 复制代码
while (true)

表示菜单一直显示。

当用户输入 0 时:

java 复制代码
return;

直接结束 main 方法,程序结束。


二十、常见错误与解决方法

1. if 条件后面误加分号

错误写法:

java 复制代码
int age = 16;

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

运行结果:

text 复制代码
成年

原因:

text 复制代码
if 后面的分号表示 if 语句已经结束,后面的大括号变成普通代码块。

正确写法:

java 复制代码
int age = 16;

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

2. switch 中忘记 break

错误写法:

java 复制代码
int week = 1;

switch (week) {
    case 1:
        System.out.println("星期一");
    case 2:
        System.out.println("星期二");
    default:
        System.out.println("输入结束");
}

问题:

text 复制代码
会出现 case 穿透。

如果不想穿透,应加 break。


3. while 循环忘记修改条件

错误写法:

java 复制代码
int i = 1;

while (i <= 5) {
    System.out.println(i);
}

原因:

text 复制代码
i 一直等于 1,条件永远成立,形成死循环。

正确写法:

java 复制代码
int i = 1;

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

4. 字符串比较使用 ==

错误写法:

java 复制代码
String password = "123456";

if (password == "123456") {
    System.out.println("登录成功");
}

推荐写法:

java 复制代码
String password = "123456";

if (password.equals("123456")) {
    System.out.println("登录成功");
}

5. for 循环条件写错

错误写法:

java 复制代码
for (int i = 1; i >= 10; i++) {
    System.out.println(i);
}

原因:

text 复制代码
i 初始值是 1,条件 i >= 10 一开始就不成立,所以循环一次都不会执行。

正确写法:

java 复制代码
for (int i = 1; i <= 10; i++) {
    System.out.println(i);
}

二十一、本章练习

练习1:判断正负数

从键盘输入一个整数,判断它是正数、负数还是零。

参考代码:

java 复制代码
import java.util.Scanner;

public class Practice01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入一个整数:");
        int num = scanner.nextInt();

        if (num > 0) {
            System.out.println("正数");
        } else if (num < 0) {
            System.out.println("负数");
        } else {
            System.out.println("零");
        }
    }
}

练习2:判断闰年

判断一个年份是否为闰年。

规则:

text 复制代码
能被4整除但不能被100整除;
或者能被400整除。

参考代码:

java 复制代码
import java.util.Scanner;

public class Practice02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入年份:");
        int year = scanner.nextInt();

        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            System.out.println(year + " 是闰年");
        } else {
            System.out.println(year + " 不是闰年");
        }
    }
}

练习3:计算 1 到 n 的和

从键盘输入一个正整数 n,计算 1 到 n 的和。

参考代码:

java 复制代码
import java.util.Scanner;

public class Practice03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入一个正整数:");
        int n = scanner.nextInt();

        int sum = 0;

        for (int i = 1; i <= n; i++) {
            sum += i;
        }

        System.out.println("1到" + n + "的和是:" + sum);
    }
}

练习4:输出水仙花数

水仙花数指的是一个三位数,其各位数字立方和等于该数本身。

例如:

text 复制代码
153 = 1³ + 5³ + 3³

参考代码:

java 复制代码
public class Practice04 {
    public static void main(String[] args) {
        for (int i = 100; i <= 999; i++) {
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100;

            if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
                System.out.println(i);
            }
        }
    }
}

运行结果:

text 复制代码
153
370
371
407

练习5:打印倒三角

输出如下图形:

text 复制代码
*****
****
***
**
*

参考代码:

java 复制代码
public class Practice05 {
    public static void main(String[] args) {
        for (int i = 5; i >= 1; i--) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

二十二、本章总结

本章主要学习了 Java 流程控制语句。

重点内容如下:

  1. Java 程序结构包括顺序结构、分支结构和循环结构;
  2. if 语句用于简单条件判断;
  3. if-else 用于二选一判断;
  4. if-else if-else 用于多条件判断;
  5. switch 适合固定值匹配;
  6. switch 中 break 用于结束分支;
  7. for 循环适合循环次数明确的场景;
  8. while 循环适合循环次数不明确的场景;
  9. do-while 循环至少执行一次;
  10. break 用于结束循环或 switch;
  11. continue 用于跳过本次循环;
  12. return 用于结束当前方法;
  13. 嵌套循环常用于打印图形、九九乘法表等场景;
  14. 菜单系统常使用 while + switch 实现。

二十三、下一章预告

下一章将学习 Java 数组,主要内容包括:

  • 数组的概念
  • 一维数组
  • 数组初始化
  • 数组遍历
  • 数组最大值与最小值
  • 数组元素求和
  • 数组拷贝
  • 二维数组
  • 杨辉三角
  • 稀疏数组

数组是学习排序、查找、数据结构和项目开发的重要基础。