Java 入门教程(三):流程控制
1438 字
7 分钟
Java 入门教程(三):流程控制
- 1Java 入门教程(一):JDK、IDEA 与第一个程序
- 2Java 入门教程(二):语法基础与运算符
- 3Java 入门教程(三):流程控制本文
- 4Java 入门教程(四):方法与数组
- 5Java 入门教程(五):面向对象(上)——类与封装
- 6Java 入门教程(六):面向对象(下)——继承、多态与接口
- 7Java 入门教程(七):核心类库——String、包装类与常用工具
- 8Java 入门教程(八):集合框架
- 9Java 入门教程(九):异常处理
- 10Java 入门教程(十):文件 IO 与 NIO
- 11Java 入门教程(十一):多线程与 Lambda
- 12Java 入门教程(十二):Stream API 与综合实战
本篇目标
Java 的流程控制与 C/C++ 同源,但更安全(编译器更严格),且 Java 14+ 引入了现代的 switch 表达式。本篇全覆盖,含经典练习。
一、分支
if / else if / else
import java.util.Scanner;
public class Grade { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int score = sc.nextInt();
if (score >= 90) { System.out.println("优秀"); } else if (score >= 80) { System.out.println("良好"); } else if (score >= 60) { System.out.println("及格"); } else { System.out.println("不及格"); } }}与 C++ 唯一显著差异:Java 条件必须是 boolean——if (score = 90) 这种笔误直接编译错误(比 C++ 安全)。
传统 switch 语句
public class Calculator { public static void main(String[] args) { char op = '+'; int a = 3, b = 4;
switch (op) { case '+': System.out.println(a + b); break; // ⚠ 照样会贯穿! case '-': System.out.println(a - b); break; case '*': case 'x': // 多标签共享分支 System.out.println(a * b); break; default: System.out.println("不支持"); } }}switch 支持的类型:byte/short/char/int、String(Java 7+!)、枚举。不支持 long、double、float。
switch 表达式(Java 14+,现代首选)
箭头语法:不贯穿、不用 break、可直接返回值:
public class Week { public static void main(String[] args) { int day = 6;
// ① 箭头分支(无贯穿烦恼) String type = switch (day) { case 1, 2, 3, 4, 5 -> "工作日"; case 6, 7 -> "周末"; default -> "非法日期"; // 必须穷尽!有 default 才编译通过 }; System.out.println(type); // 周末
// ② 带代码块的分支(yield 返回值) String detail = switch (day) { case 6, 7 -> { String name = (day == 6) ? "周六" : "周日"; yield name + "休息"; // yield 产出值 } default -> "上班"; }; System.out.println(detail); }}新语法三大优点:不贯穿、强制穷尽(编译器查漏)、能当表达式赋值。新代码一律用它。
三元运算符
int a = 10, b = 20;int max = a > b ? a : b;二、循环
while 与 do-while
// 1~100 求和int sum = 0, i = 1;while (i <= 100) { sum += i; i++;}System.out.println(sum); // 5050
// do-while:至少执行一次(菜单场景)int choice;do { System.out.println("1.开始 0.退出"); // choice = 读入... choice = 0; // 演示用} while (choice != 0);for 经典三段式
for (int i = 1; i <= 9; i++) { System.out.printf("%d ", i * i);}
// 多变量版本for (int i = 0, j = 10; i < j; i++, j--) { System.out.println(i + " " + j);}
// 死循环for (;;) { }while (true) { }增强 for(for-each):遍历数组/集合
int[] nums = {10, 20, 30};for (int n : nums) { System.out.println(n);}
String[] langs = {"Java", "Python", "C++"};for (String lang : langs) { System.out.println(lang);}限制:拿不到下标、遍历中不能修改数组元素(只读便利)。
三、break / continue 与标签
// 常规:作用于本层for (int i = 0; i < 10; i++) { if (i == 5) break; // 0~4 if (i % 2 == 0) continue; // 跳过偶数 System.out.println(i);}
// Java 特色:标签跳转(直接跳出多层循环,goto 的安全版)outer:for (int i = 1; i <= 9; i++) { for (int j = 1; j <= 9; j++) { if (i * j > 30) { break outer; // 一口气跳出两层! } System.out.printf("%d×%d=%d ", i, j, i * j); } System.out.println();}
// continue outer:跳到外层下一轮标签语法是 Java 对”多层循环跳出”的正规解(C++ 只能用标志变量或 goto)。
四、经典练习
1. 九九乘法表
for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.printf("%d×%d=%-4d", j, i, i * j); } System.out.println();}2. 质数判断与 100 内质数表
static boolean isPrime(int n) { if (n < 2) return false; for (int i = 2; (long) i * i <= n; i++) { // i*i 防溢出用 long 比 if (n % i == 0) return false; } return true;}
public static void main(String[] args) { int count = 0; for (int n = 2; n < 100; n++) { if (isPrime(n)) { System.out.printf("%d ", n); count++; } } System.out.println("\n共 " + count + " 个");}3. 水仙花数
for (int n = 100; n < 1000; n++) { int a = n / 100, b = n / 10 % 10, c = n % 10; if (a*a*a + b*b*b + c*c*c == n) System.out.println(n); // 153 370 371 407}4. 菱形图案(嵌套循环的空间训练)
int n = 5; // 菱形半径for (int i = -n; i <= n; i++) { int row = n - Math.abs(i); // 当前行星数半径 for (int s = 0; s < Math.abs(i); s++) System.out.print(" "); for (int j = 0; j < 2 * row + 1; j++) System.out.print("*"); System.out.println();}5. 猜数字(输入校验 + 循环)
import java.util.Random;import java.util.Scanner;
public class Guess { public static void main(String[] args) { Random rand = new Random(); int answer = rand.nextInt(100) + 1; // 1~100 Scanner sc = new Scanner(System.in); int tries = 0;
while (true) { System.out.print("猜(1-100): "); if (!sc.hasNextInt()) { // 输入校验 System.out.println("请输入数字!" + sc.next() + " 被忽略"); continue; } int guess = sc.nextInt(); tries++;
if (guess < answer) System.out.println("小了"); else if (guess > answer) System.out.println("大了"); else { System.out.println("对了!用了 " + tries + " 次"); break; } } }}五、产生随机数的方式
// 方式1:Random 类(推荐)import java.util.Random;Random rand = new Random();int n = rand.nextInt(100) + 1; // 1~100double d = rand.nextDouble(); // [0,1)boolean b = rand.nextBoolean();
// 方式2:Math.random()int m = (int)(Math.random() * 100) + 1;
// 固定种子 → 可复现(测试用)Random seeded = new Random(42);小练习
- 输入一个整数,判断是否为回文数(12321 ✓;循环反转数字后比较)
- 求 1000 内所有”完数”(因子和等于自身,如 6=1+2+3)
- 用 switch 表达式输出某年某月的天数(注意闰年二月:
(y%4==0&&y%100!=0)||y%400==0) - 打印斐波那契数列前 20 项(for + 两个变量滚动)
- 二重循环求”3 个数字组合能组成多少个互不相同的三位数”(1、2、3、4)
本篇小结
- 条件必须 boolean(if 笔误编译期拦截);switch 支持 String 与枚举
- switch 表达式(Java 14+):箭头不贯穿、强制穷尽、可赋值——新代码首选
- 增强 for 遍历数组简洁但无下标
- 标签 break/continue 可直接跳出多层循环
- hasNextInt 先验后读防输入崩溃
下一篇:方法与数组——Java 版的函数与第一批容器。
本系列为 Cyber先锋社原创教程。五个经典练习独立完成后再看参考,效果翻倍。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Java 入门教程(三):流程控制
https://www.cyberpioneer.club/posts/java-tutorial-03/相关文章智能推荐
1
Java 入门教程(四):方法与数组
Java 教程掌握 Java 方法定义与重载、可变参数、值传递本质、数组全操作(声明/遍历/工具类 Arrays/二维数组)、命令行参数与 main 签名,附数组统计与矩阵转置实战。
2
Java 入门教程(二):语法基础与运算符
Java 教程详解 Java 基本语法:注释、变量与常量、八种基本类型与类型转换规则、七类运算符、Scanner 输入进阶与 printf 格式化,配典型陷阱与对照示例。
3
Java 入门教程(一):JDK、IDEA 与第一个程序
Java 教程进入 Java 的世界:理解"一次编写,到处运行"的原理、安装 JDK 与 IDEA、解剖第一个程序的结构、掌握变量与数据类型。企业级开发语言的起点。
4
C++ 入门教程(三):流程控制
C++ 教程完整讲解 C++ 分支(if/switch)、三种循环(while/do-while/for)、范围 for 与 auto、break/continue、嵌套与经典算法练习(九九表/质数/图形打印/猜数字)。
5
Java 入门教程(八):集合框架
Java 教程系统讲解 Java 集合体系:List(ArrayList/LinkedList)、Set(HashSet/TreeSet/LinkedHashSet)、Map(HashMap/TreeMap)核心操作与选型、迭代与 fail-fast、Comparable 与 Comparator 排序、集合工具类,附词频统计与成绩系统案例。
随机文章随机推荐



