一、分支结构(if-else、switch)实验场景
1. 数据校验与条件处理
- 场景:用户输入合法性检查(如成绩范围、年龄有效性)。
- 示例:判断学生成绩等级
int score = 85;
String grade;
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else if (score >= 60) {
grade = "D";
} else {
grade = "E"; // 不及格
}
System.out.println("成绩等级:" + grade);
- 扩展:用 switch 优化多条件判断(适用于离散值,如月份、星期)。
2. 业务逻辑分支控制
- 场景:学生管理系统中的功能菜单选择
Scanner scanner = new Scanner(System.in);
System.out.println("请选择操作:1-添加学生 2-查询学生 3-退出");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println("执行添加学生操作");
break;
case 2:
System.out.println("执行查询学生操作");
break;
case 3:
System.out.println("退出系统");
break;
default:
System.out.println("输入错误,请重新选择");
}
二、循环结构(for、while、do-while)实验场景
1. 数据遍历与累加计算
- 场景:计算学生成绩平均分
int[] scores = {85, 90, 78, 92, 88};
int sum = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
double average = (double) sum / scores.length;
System.out.println("平均分:" + average);
- 增强for循环:更简洁地遍历数组或集合
for (int score : scores) {
sum += score;
}
2. 交互式循环输入
- 场景:循环接收用户输入,直到输入合法数据
Scanner scanner = new Scanner(System.in);
int age = 0;
boolean valid = false;
while (!valid) {
System.out.println("请输入年龄(18-60岁):");
if (scanner.hasNextInt()) {
age = scanner.nextInt();
if (age >= 18 && age <= 60) {
valid = true;
} else {
System.out.println("年龄超出范围,请重新输入");
}
} else {
System.out.println("输入必须是数字,请重新输入");
scanner.next(); // 清空错误输入
}
}
System.out.println("合法年龄:" + age);
3. 穷举与迭代求解(算法基础)
- 场景:计算阶乘(5! = 5×4×3×2×1)
int n = 5;
int factorial = 1;
for (int i = 1; i <= n; i++) {
factorial *= i;
}
System.out.println(n + "的阶乘:" + factorial);
- 场景:斐波那契数列(1, 1, 2, 3, 5...)
int n = 10; // 求前10项
int a = 1, b = 1;
System.out.print(a + " " + b + " ");
for (int i = 3; i <= n; i++) {
int c = a + b;
System.out.print(c + " ");
a = b;
b = c;
}
三、分支与循环结合的综合实验
1. 学生成绩管理系统(简化版)
- 需求:循环显示菜单,根据用户选择执行不同操作(添加成绩、计算平均分、退出)。
- 实现:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ScoreManager {
public static void main(String[] args) {
List<Integer> scores = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
boolean running = true;
while (running) {
System.out.println("\n===== 学生成绩管理系统 =====");
System.out.println("1. 添加成绩");
System.out.println("2. 显示平均分");
System.out.println("3. 退出系统");
System.out.print("请选择操作:");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.print("输入成绩(0-100):");
int score = scanner.nextInt();
if (score >= 0 && score <= 100) {
scores.add(score);
System.out.println("成绩添加成功");
} else {
System.out.println("成绩无效,请输入0-100之间的数");
}
break;
case 2:
if (scores.isEmpty()) {
System.out.println("暂无成绩数据");
} else {
int sum = 0;
for (int s : scores) {
sum += s;
}
double avg = (double) sum / scores.size();
System.out.println("平均分:" + avg);
}
break;
case 3:
running = false;
System.out.println("系统已退出");
break;
default:
System.out.println("选择错误,请重新输入");
}
}
scanner.close();
}
}
2. 猜数字游戏(分支+循环+随机数)
- 需求:计算机生成1-100的随机数,用户循环猜数,根据提示(“大了”“小了”)调整,直到猜中。
- 实现关键点:
int target = new Random().nextInt(100) + 1; // 生成1-100的随机数
int guess;
Scanner scanner = new Scanner(System.in);
do {
System.out.print("请猜一个1-100的数字:");
guess = scanner.nextInt();
if (guess > target) {
System.out.println("猜大了!");
} else if (guess < target) {
System.out.println("猜小了!");
} else {
System.out.println("恭喜猜中了!");
}
} while (guess != target);
四、实验中常见问题与技巧
1. 循环终止条件:避免死循环(如 while(true) 需配合 break 退出)。
2. 分支顺序:if-else分支按优先级排序(如先判断特殊情况,再处理常规情况)。
3. 输入处理:使用 try-catch 处理非法输入(如非数字输入),或配合 hasNextInt() 等方法校验。
4. 嵌套结构:避免多层嵌套(如循环中套循环),若逻辑复杂可封装为方法。
通过分支和循环的组合,可实现从简单数据处理到复杂业务逻辑的控制。在实验中,建议从单一结构练习开始(如单独使用for循环遍历数组),再逐步过渡到综合场景(如菜单驱动的交互式系统),理解如何用逻辑控制流解决实际问题。
5752

被折叠的 条评论
为什么被折叠?



