流程控制工程
本篇定位
本篇聚合 IDEA 工程 flow-control-app 的全部源码练习(2025-12 学),按包分节全文收录——当年的学习注释(// 目标:… // 需求:…)原样保留,是最真实的练习轨迹。工程怎么建、模块/包/类怎么管理见 00-管理项目。
包含 14 个 .java 练习,目录结构:
flow-control-app/src/
├── com/zwnsyw/branch/IfDemo1.java
├── com/zwnsyw/branch/SwitchDemo2.java
├── com/zwnsyw/branch/SwitchDemo3.java
├── com/zwnsyw/branch/SwitchDemo4.java
├── com/zwnsyw/loop/BreakAndContinueDemo8.java
├── com/zwnsyw/loop/DoWhileDemo5.java
├── com/zwnsyw/loop/EndLessLoopDemo6.java
├── com/zwnsyw/loop/ForDemo1.java
├── com/zwnsyw/loop/ForDemo2.java
├── com/zwnsyw/loop/LoopNestedDemo7.java
├── com/zwnsyw/loop/WhileDemo3.java
├── com/zwnsyw/loop/WhileTest4.java
├── com/zwnsyw/random/RandomDemo1.java
└── com/zwnsyw/random/RandomTest2.java
分支结构
if 与 switch 各形态。
IfDemo1.java
package com.zwnsyw.branch;
public class IfDemo1 {
public static void main(String[] args) {
// 目标:需要同学们掌握if分支三种形式的用法和执行流程。
// 需求:测量用户体温,发现体温高于37度就报警。
double t = 36.9;
if(t > 37){
System.out.println("这个人的温度异常,把他赶紧带走~~");
}
// 需求2:发红包,你的钱包余额是99元,现在要发出90元
// 如果钱够触发发红包的动作,如果钱不够,则提示:余额不足。
double money = 19;
if(money >= 90){
System.out.println("发红包成功了~");
}else {
System.out.println("余额不足~~");
}
// 需求3:某个公司有一个绩效系统,根据员工的打分输出对应的绩效级别。[0,60) D [60,80) C [80,90) B [90,100] A
int score = 298;
if(score >= 0 && score < 60) {
System.out.println("您的绩效级别是: D");
}else if(score >= 60 && score < 80){
System.out.println("您的绩效级别是: C");
}else if(score >= 80 && score < 90){
System.out.println("您的绩效级别是: B");
}else if(score >= 90 && score <= 100){
System.out.println("您的绩效级别是: A");
}else {
System.out.println("您录入的分数有毛病~~");
}
}
}
SwitchDemo2.java
package com.zwnsyw.branch;
/**
目标:掌握switch的写法,理解其执行流程
*/
public class SwitchDemo2 {
public static void main(String[] args) {
// 周一:埋头苦干,解决bug 周五:今晚吃鸡
// 周二: 请求大牛程序员帮忙 周六:与王婆介绍的小芳相亲
// 周三:今晚啤酒、龙虾、小烧烤 周日:郁郁寡欢、准备上班。
// 周四:主动帮助新来的女程序解决bug
String week = "周三";
switch (week){
case "周一":
System.out.println("埋头苦干,解决bug");
break;
case "周二":
System.out.println("请求大牛程序员帮忙");
break;
case "周三":
System.out.println("今晚啤酒、龙虾、小烧烤");
break;
case "周四":
System.out.println("主动帮助新来的女程序解决bug");
break;
case "周五":
System.out.println("今晚吃鸡");
break;
case "周六":
System.out.println("与王婆介绍的小芳相亲");
break;
case "周日":
System.out.println("郁郁寡欢、准备上班");
break;
default:
System.out.println("您输入的星期信息不存在~~~");
}
}
}
SwitchDemo3.java
package com.zwnsyw.branch;
public class SwitchDemo3 {
public static void main(String[] args) {
// 目标:搞清楚switch使用时的几点注意事项。
// 1、表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
int a = 10;
double b = 0.1;
double b2 = 0.2;
double c = b + b2;
System.out.println(c);
switch (a){
}
// 2、case给出的值不允许重复,且只能是字面量,不能是变量。
int i = 20;
int d = 20;
switch (i){
case 10:
break;
case 20:
break;
}
// 3、正常使用switch的时候,不要忘记写break,否则会出现穿透现象。
String week = "周三";
switch (week){
case "周一":
System.out.println("埋头苦干,解决bug");
break;
case "周二":
System.out.println("请求大牛程序员帮忙");
//break;
case "周三":
System.out.println("今晚啤酒、龙虾、小烧烤");
//break;
case "周四":
System.out.println("主动帮助新来的女程序解决bug");
break;
case "周五":
System.out.println("今晚吃鸡");
break;
case "周六":
System.out.println("与王婆介绍的小芳相亲");
break;
case "周日":
System.out.println("郁郁寡欢、准备上班");
break;
default:
System.out.println("您输入的星期信息不存在~~~");
}
}
}
SwitchDemo4.java
package com.zwnsyw.branch;
public class SwitchDemo4 {
public static void main(String[] args) {
// 目标2:理解switch穿透性的作用:
String week = "周五";
switch (week){
case "周一":
System.out.println("埋头苦干,解决bug");
break;
case "周二":
case "周三":
case "周四":
System.out.println("请求大牛程序员帮忙");
break;
case "周五":
System.out.println("自己整理代码");
break;
case "周六":
case "周日":
System.out.println("打游戏");
break;
default:
System.out.println("您输入的星期信息不存在~~~");
}
}
}
循环结构
三种循环 + 嵌套 + 跳转控制。
BreakAndContinueDemo8.java
package com.zwnsyw.loop;
public class BreakAndContinueDemo8 {
public static void main(String[] args) {
// 目标:掌握break和continue的作用。
// 1、break:跳出并结束当前所在循环的执行。
// 场景:假如你又有老婆了,你犯错了,你老婆罚你说:5句我爱你
// 说到第三句的时候心软了,让你别再说了。
for (int i = 1; i <= 5; i++) {
System.out.println("我爱你:" + i);
if(i == 3){
// 说明已经说完了第三句了,心软了。
break; // 跳出并结束当前所在循环的执行。
}
}
// 2、continue:跳出当前循环的当次执行,直接进入循环的下一次执行。
// 场景: 假如你有老婆,你犯错了,你老婆罚你洗碗5天。
// 第三天的时候,你表现很好,第三天不用洗碗,但是不解恨,第四天还是要继续的。
for (int i = 1; i <= 5; i++) {
if(i == 3) {
// 已经到了第三天,第三天不用洗的。
continue;
}
System.out.println("洗碗:" + i);
}
if(3 < 9){
//break;
// continue;
System.out.println("Hello World");
}
}
}
DoWhileDemo5.java
package com.zwnsyw.loop;
public class DoWhileDemo5 {
public static void main(String[] args) {
// 目标:掌握do-while循环的书写格式,执行流程,特点和应用场景。
// 需求:打印多行Hello World
int i = 0;
do{
System.out.println("Hello World");
i++;
}while (i < 3);
// 特点:先执行后判断
do{
System.out.println("Hello World2");
}while (false);
System.out.println("------------------------------------------------------");
for (int j = 0; j < 3; j++) {
System.out.println("Hello World3");
}
// System.out.println(j);
for (int j = 0; j < 3; j++) {
System.out.println("Hello World3");
}
int m = 0;
while (m < 3){
System.out.println("Hello World4");
m++;
}
System.out.println(m); // 3
}
}
EndLessLoopDemo6.java
package com.zwnsyw.loop;
public class EndLessLoopDemo6 {
public static void main(String[] args) {
// 目标:掌握死循环的写法。
/* for ( ; ; ){
System.out.println("Hello World1");
}*/
/* while (true) {
System.out.println("Hello World2");
}*/
do {
System.out.println("Hello World3");
}while (true);
}
}
ForDemo1.java
package com.zwnsyw.loop;
public class ForDemo1 {
public static void main(String[] args) {
// 目标:需要同学们掌握for循环的书写格式,并理解其执行流程
// 需求:打印多行Hello World
/**
流程:
首先会执行初始化语句:int i = 0;
i = 0,判断循环条件 0 < 3,返回true,计算机会进入到循环中执行输出第一行Hello World,接着执行迭代语句i++
i = 1,判断循环条件 1 < 3,返回true,计算机会进入到循环中执行输出第二行Hello World,接着执行迭代语句i++
i = 2,判断循环条件 2 < 3,返回true,计算机会进入到循环中执行输出第三行Hello World,接着执行迭代语句i++
i = 3,判断循环条件 3 < 3,返回false,循环就会立即结束。
*/
for(int i = 0; i < 3; i++) {
// i = 0 1 2
System.out.println("Hello World");
}
System.out.println("--------------------------");
for(int i = 1; i <= 5; i++) {
// i = 1 2 3 4 5
System.out.println("Hello World2");
}
System.out.println("---------------------------");
for(int i = 1; i <= 10; i += 2) {
// 1 3 5 7 9
System.out.println("Hello World3");
}
}
}
ForDemo2.java
package com.zwnsyw.loop;
public class ForDemo2 {
public static void main(String[] args) {
// 目标:掌握使用for循环批量产生数据。
for (int i = 1; i <= 100; i++) {
System.out.println(i);
}
System.out.println("=========================================");
// 2、定义一个变量用于求和
int sum = 0; // 15
// 1、定义一个循环,先产生1-100,这100个数
for (int i = 1; i <= 100; i++) {
// i = 1 2 3 4 5
sum += i; //sum = sum + i;
}
System.out.println("1-100的数据和:" + sum);
System.out.println("=========================================");
// 2、定义一个变量用于求和
int sum1 = 0;
// 1、定义一个循环产生1-100之间的奇数
for (int i = 1; i < 100; i+=2) {
// i = 1 3 5 7 ...
sum1 += i;
}
System.out.println("1-100之间的奇数和:" + sum1);
System.out.println("=========================================");
// 2、定义一个变量用于累加奇数求和
int sum2 = 0; // 4
// 1、定义循环产生1-100之间的每个数据
for (int i = 1; i <= 100; i++) {
// i = 1 2 3 4 5 6 ... 99 100
// 2、使用一个if分支,判断i此时记住的数据是否是奇数,是奇数我们才累加给一个变量
if(i % 2 == 1){
// i = 1 3 5 7 9 ... 99
sum2 += i;
}
}
System.out.println("1-100之间的奇数和:" + sum2);
}
}
LoopNestedDemo7.java
package com.zwnsyw.loop;
public class LoopNestedDemo7 {
public static void main(String[] args) {
// 目标:搞清楚循环嵌套的执行流程。
// 场景:假如你有老婆,你犯错了,你老婆罚你说:3天,每天5句我爱你。
for (int i = 1; i <= 3; i++) {
// i = 1 2 3
for(int j = 1; j <= 5; j++) {
System.out.println("我爱你:" + i);
}
System.out.println("-------------------------");
}
/**
****
****
****
*/
for (int i = 1; i <= 4; i++) {
// i = 1 2 3
// 定义一个循环控制每行打印多少列星星。
for (int j = 1; j <= 40; j++) {
System.out.print("*"); // 不换行
}
System.out.println(); // 换行
}
}
}
WhileDemo3.java
package com.zwnsyw.loop;
public class WhileDemo3 {
public static void main(String[] args) {
// 目标:掌握while循环的书写格式,以及理解其执行流程。
// 需求:打印多行Hello World
int i = 0;
while (i < 5) {
// i = 0 1 2 3 4
System.out.println("Hello World");
i++;
}
}
}
WhileTest4.java
package com.zwnsyw.loop;
public class WhileTest4 {
public static void main(String[] args) {
// 目标:使用while循环解决问题,并理解什么情况下使用while,for。
// 1、定义变量记住珠穆朗玛峰的高度和纸张的高度。
double peakHeight = 8848860;
double paperThickness = 0.1;
// 3、定义一个变量count用于记住纸张折叠了多少次
int count = 0;
// 2、定义while循环控制纸张开始折叠
while (paperThickness < peakHeight) {
// 把纸张进行折叠,把纸张的厚度变成原来的2倍。
paperThickness = paperThickness * 2;
count++;
}
System.out.println("需要折叠多少次:" + count);
System.out.println("最终纸张的厚度是:" + paperThickness);
}
}
Random 随机数
Random 类与猜数字类练习。
RandomDemo1.java
package com.zwnsyw.random;
import java.util.Random;
public class RandomDemo1 {
public static void main(String[] args) {
// 目标:掌握使用Random生成随机数的步骤。
// 1、导包。
// 2、创建一个Random对象,用于生成随机数。
Random r = new Random();
// 3、调用Random提供的功能:nextInt得到随机数。
for (int i = 1; i <= 20; i++) {
int data = r.nextInt(10); // 0 - 9
System.out.println(data);
}
System.out.println("-----------------------");
for (int i = 1; i <= 20; i++) {
// 生成:1-10之间的随机数
// 1-10 => -1 => (0 - 9) + 1
int data2 = r.nextInt(10) + 1;
System.out.println(data2);
}
System.out.println("-------------------------");
for (int i = 1;i <= 20; i++) {
// 3 - 17 => -3 => (0 - 14) + 3
int data3 = r.nextInt(15) + 3;
System.out.println(data3);
}
}
}
RandomTest2.java
package com.zwnsyw.random;
import java.util.Random;
import java.util.Scanner;
public class RandomTest2 {
public static void main(String[] args) {
// 1、随机产生一个1-100之间的数据,做为中奖号码。
Random r = new Random();
int luckNumber = r.nextInt(100) + 1;
// 2、定义一个死循环,让用户不断的猜测数据
Scanner sc = new Scanner(System.in);
while (true) {
// 提示用户猜测
System.out.println("请您输入您猜测的数据:");
int guessNumber = sc.nextInt();
// 3、判断用户猜测的数字与幸运号码的大小情况
if(guessNumber > luckNumber){
System.out.println("您猜测的数字过大~~");
}else if(guessNumber < luckNumber){
System.out.println("您猜测的数字过小~~");
}else {
System.out.println("恭喜您,猜测成功了,可以买单了~~");
break; // 结束死循环
}
}
}
}
💬 评论