三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

10 基础阶段综合实战

10 基础阶段综合实战

🟢 10 基础阶段综合实战

📅 更新于 2026年5月 | ✍️ 原创文章,转载请注明出处



1. 猜数字游戏

1.1 游戏规则

  • 程序随机生成 1-100 的数字
  • 用户反复猜测,程序提示"大了"或"小了"
  • 猜对后显示猜测次数

1.2 完整代码

importjava.util.Random;importjava.util.Scanner;publicclassGuessNumber{publicstaticvoidmain(String[]args){Randomrandom=newRandom();inttarget=random.nextInt(100)+1;// 1-100Scannerscanner=newScanner(System.in);intcount=0;System.out.println("🎮 猜数字游戏!范围 1-100");while(true){System.out.print("请输入你的猜测: ");intguess=scanner.nextInt();count++;if(guess==target){System.out.println("🎉 恭喜!你猜对了!答案就是 "+target);System.out.println("你一共猜了 "+count+" 次");break;}elseif(guess>target){System.out.println("📈 大了!再试试");}else{System.out.println("📉 小了!再试试");}}scanner.close();}}

1.3 代码解析

知识点说明
Random生成随机数,nextInt(100)生成 0-99
Scanner接收用户输入
while(true)无限循环,直到猜对才break
if-else多条件判断

1.4 进阶:二分查找策略

// 最优策略:每次取中间值// 第1次猜50,第2次猜25或75...// 最多只需7次就能猜出1-100的任意数字// log₂(100) ≈ 6.64,向上取整 = 7

2. 简易计算器

2.1 功能说明

支持加减乘除四则运算,输入两个数和运算符,输出结果。

2.2 完整代码

importjava.util.Scanner;publicclassSimpleCalculator{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.println("🧮 简易计算器");System.out.print("请输入第一个数: ");doublenum1=scanner.nextDouble();System.out.print("请输入运算符 (+, -, *, /): ");charoperator=scanner.next().charAt(0);System.out.print("请输入第二个数: ");doublenum2=scanner.nextDouble();doubleresult;booleanvalid=true;switch(operator){case'+':result=num1+num2;break;case'-':result=num1-num2;break;case'*':result=num1*num2;break;case'/':if(num2!=0){result=num1/num2;}else{System.out.println("❌ 错误:除数不能为0!");valid=false;result=0;}break;default:System.out.println("❌ 无效的运算符!");valid=false;result=0;}if(valid){System.out.println("✅ 结果: "+num1+" "+operator+" "+num2+" = "+result);}scanner.close();}}

2.3 知识点总结

知识点应用
switch运算符分支判断
double支持小数运算
charAt(0)获取字符串第一个字符
除零检查边界条件处理

3. 冒泡排序

3.1 算法原理

冒泡排序通过相邻元素比较交换,每轮将最大的元素"冒泡"到末尾。

3.2 图解过程

原始数组: [5, 3, 8, 1, 2] 第1轮: 比较相邻元素,大的往后交换 [5, 3, 8, 1, 2] → [3, 5, 8, 1, 2] (5>3, 交换) [3, 5, 8, 1, 2] → [3, 5, 8, 1, 2] (5<8, 不换) [3, 5, 8, 1, 2] → [3, 5, 1, 8, 2] (8>1, 交换) [3, 5, 1, 8, 2] → [3, 5, 1, 2, 8] (8>2, 交换) 结果: [3, 5, 1, 2, 8] ✅ 8已就位 第2轮: [3, 5, 1, 2, 8] → [3, 5, 1, 2, 8] [3, 5, 1, 2, 8] → [3, 1, 5, 2, 8] [3, 1, 5, 2, 8] → [3, 1, 2, 5, 8] 结果: [3, 1, 2, 5, 8] ✅ 5已就位 ...依此类推

3.3 代码实现

publicclassBubbleSort{publicstaticvoidmain(String[]args){int[]arr={5,3,8,1,2};System.out.println("排序前: "+arrayToString(arr));// 冒泡排序for(inti=0;i<arr.length-1;i++){booleanswapped=false;// 优化:如果没交换说明已有序for(intj=0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){// 交换inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;swapped=true;}}System.out.println("第"+(i+1)+"轮: "+arrayToString(arr));if(!swapped){System.out.println("已有序,提前结束!");break;}}System.out.println("排序后: "+arrayToString(arr));}privatestaticStringarrayToString(int[]arr){StringBuildersb=newStringBuilder("[");for(inti=0;i<arr.length;i++){sb.append(arr[i]);if(i<arr.length-1)sb.append(", ");}sb.append("]");returnsb.toString();}}

3.4 复杂度分析

指标
最好时间O(n) — 已有序,只需一轮
最坏时间O(n²) — 完全逆序
平均时间O(n²)
空间复杂度O(1) — 原地排序
稳定性✅ 稳定

4. 学生成绩管理

4.1 功能需求

  • 录入学生成绩
  • 计算平均分、最高分、最低分
  • 统计各分数段人数
  • 查找指定学生

4.2 完整代码

importjava.util.Scanner;publicclassStudentScoreManager{// 最大支持学生数staticfinalintMAX_STUDENTS=50;staticString[]names=newString[MAX_STUDENTS];staticdouble[]scores=newdouble[MAX_STUDENTS];staticintstudentCount=0;publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);while(true){System.out.println("\n===== 学生成绩管理系统 =====");System.out.println("1. 录入成绩");System.out.println("2. 显示所有成绩");System.out.println("3. 统计分析");System.out.println("4. 查找学生");System.out.println("0. 退出");System.out.print("请选择功能: ");intchoice=scanner.nextInt();scanner.nextLine();// 消耗换行符switch(choice){case1:inputScore(scanner);break;case2:showAllScores();break;case3:analyzeScores();break;case4:findStudent(scanner);break;case0:System.out.println("👋 再见!");scanner.close();return;default:System.out.println("❌ 无效选择!");}}}// 录入成绩staticvoidinputScore(Scannerscanner){if(studentCount>=MAX_STUDENTS){System.out.println("❌ 已达最大人数限制!");return;}System.out.print("请输入学生姓名: ");Stringname=scanner.nextLine();System.out.print("请输入成绩 (0-100): ");doublescore=scanner.nextDouble();if(score<0||score>100){System.out.println("❌ 成绩范围错误!");return;}names[studentCount]=name;scores[studentCount]=score;studentCount++;System.out.println("✅ 录入成功!当前共 "+studentCount+" 名学生");}// 显示所有成绩staticvoidshowAllScores(){if(studentCount==0){System.out.println("📭 暂无数据");return;}System.out.println("\n姓名\t\t成绩\t等级");System.out.println("-".repeat(30));for(inti=0;i<studentCount;i++){Stringgrade=getGrade(scores[i]);System.out.printf("%-10s\t%.1f\t%s%n",names[i],scores[i],grade);}}// 统计分析staticvoidanalyzeScores(){if(studentCount==0){System.out.println("📭 暂无数据");return;}doublesum=0,max=scores[0],min=scores[0];int[]gradeCount=newint[5];// 优秀、良好、中等、及格、不及格for(inti=0;i<studentCount;i++){sum+=scores[i];if(scores[i]>max)max=scores[i];if(scores[i]<min)min=scores[i];if(scores[i]>=90)gradeCount[0]++;elseif(scores[i]>=80)gradeCount[1]++;elseif(scores[i]>=70)gradeCount[2]++;elseif(scores[i]>=60)gradeCount[3]++;elsegradeCount[4]++;}doubleavg=sum/studentCount;System.out.println("\n📊 统计结果");System.out.println("-".repeat(30));System.out.printf("学生人数: %d%n",studentCount);System.out.printf("平均分: %.2f%n",avg);System.out.printf("最高分: %.1f%n",max);System.out.printf("最低分: %.1f%n",min);System.out.println("\n分数段统计:");System.out.printf(" 优秀 (90-100): %d 人%n",gradeCount[0]);System.out.printf(" 良好 (80-89): %d 人%n",gradeCount[1]);System.out.printf(" 中等 (70-79): %d 人%n",gradeCount[2]);System.out.printf(" 及格 (60-69): %d 人%n",gradeCount[3]);System.out.printf(" 不及格 (<60): %d 人%n",gradeCount[4]);}// 查找学生staticvoidfindStudent(Scannerscanner){System.out.print("请输入要查找的姓名: ");Stringname=scanner.nextLine();booleanfound=false;for(inti=0;i<studentCount;i++){if(names[i].equals(name)){System.out.printf("✅ 找到: %s, 成绩: %.1f, 等级: %s%n",name,scores[i],getGrade(scores[i]));found=true;break;}}if(!found){System.out.println("❌ 未找到该学生");}}// 获取等级staticStringgetGrade(doublescore){if(score>=90)return"优秀 ⭐";if(score>=80)return"良好 👍";if(score>=70)return"中等 📝";if(score>=60)return"及格 ✅";return"不及格 ❌";}}

4.3 综合知识点

知识点在本案例中的应用
数组存储姓名和成绩
方法功能模块化(录入、显示、统计、查找)
循环遍历数组、菜单循环
条件判断分数段统计、等级判断
Scanner用户输入
switch菜单选择
static静态变量共享数据

5. 知识点回顾

通过本篇实战,我们综合运用了以下知识点:

序号知识点对应案例
1变量与数据类型所有案例
2运算符计算器、统计
3条件判断 (if/switch)所有案例
4循环 (for/while)所有案例
5数组排序、成绩管理
6方法成绩管理系统
7String 操作姓名处理
8Scanner 输入所有交互式案例

6. 总结

本篇通过4个实战案例,将前面学习的基础知识融会贯通:

  • 🎮猜数字游戏— 循环 + 条件判断 + 随机数
  • 🧮简易计算器— switch + 运算符 + 输入处理
  • 📊冒泡排序— 双重循环 + 数组操作 + 算法思维
  • 📋成绩管理系统— 综合运用所有基础知识

💬 你能基于这些案例做哪些扩展?比如:计算器支持更多运算?排序支持降序?成绩系统支持删除?

📌 下一篇我们将进入面向对象编程的世界,敬请期待!


📚 参考资料

  • Java 官方文档 - Language Basics
  • 菜鸟教程 - Java 基础语法
← 返回列表