广东工业大学计算机学院 2025-2026 学年 Java 程序设计实验归档(只有源码,不含实验报告)
Tip
代码在 exp1/Matrix.java
Warning
第三问的代码有问题,不过老师没追究,不改了
利用随机函数产生25个随机整数给一个5行5列的二维数组赋值。
- 按行列输出该数组;
- 求其最外一圈元素之和;
- 求主对角线中最大元素的值,指出其位置。
基本思路:求最外一圈元素之和的关键是找出最外一圈元素的特征。主对角线上元素的特征是行列值相等。
Tip
编写一个猜数程序。命令行显示菜单:1.开始;2.退出。
用户选择1,则程序生成一个0~99之间的随机整数,命令行显示“请输入你猜的数:”让用户猜。
用户输入猜测的数据,猜对了命令行显示“你猜对了”,并且出现菜单:1.再来一次;2.退出。
没有猜对程序给出提示(如:太大了,太小了),并要求在命令行继续输入猜测的值;
三次没猜对则程序公布正确的数字,并且出现菜单:1.再来一次;2.退出。
猜数时任何一个环节,命令行上总会显示用户的总得分情况。
得分规则如下:一次猜中得3分,第二次猜中得2分,其三次得1分,三次没有猜中扣2分。
主类的名称定为GuessNumber。
提示:题目只是大致描述了命令行的输入和输出的要求,可以自行设计命令行的输入输出的形式,使得用户在使用时觉得界面友好。
同样,整个猜测的流程可以根据自己的理解进行优化和调整,使得用户在使用时更为流畅。
Tip
蒙特卡洛方法求圆周率。蒙特卡洛方法通过随机采样估计数值,计算圆周率π的步骤如下:
- 区域设定:考虑单位正方形(0≤x≤1,0≤y≤1)及其内接四分之一圆(x² + y² ≤ 1)。四分之一圆面积为π/4,正方形面积为1。
- 随机采样:生成大量均匀分布在正方形内的随机点(x, y)。
- 统计比例:计算落在四分之一圆内的点数N_in,总点数N_total。概率上,N_in/N_total ≈ π/4。
- 估计π值:将比例乘以4,得到π ≈ 4 × (N_in / N_total)。
Important
要求:大模型辅助解题
Tip
某长途车整点发车一次,正常情况下,汽车在发车40分钟后停靠本站。
由于路上可能出现堵车,假定汽车因此而随机耽搁0-30分钟。
假设某位旅客在每天的10:00-10:30之间一个随机时刻来到本站,那么他平均等待的时间是多少分钟。
请计算出平均等待的分钟数。
Tip
某公司编写一个工资支付系统,用于计算某一类员工的月薪
该公司共有四类员工
- 领固定月薪(SalariedEmployee)
- 计时取酬(HourlyEmployee,如果一月工时超过160小时,则还需对额外的工时支付加班费)
- 按销售额提成(CommissionEmployee)
- 带底薪并按销售额提成(BasePlusCommissionEmployee)
其继承层次结构如下所示
已知每类员工均有表示员工工号、姓名和出生年月的属性,和用于计算员工月薪的方法
创建一个 Employee 变量数组,保存 Employee 类层次结构中每个具体类对象的引用,对每个 Employee 显示其工号、姓名、出生年月和月收入
如果当月是 Employee 的生日所在的月份,则还另发给他 100 元作为红包
吐槽:不是这说的也太乱了 =-=
Tip
如果对象 a 含有对象 b 的引用,对象 b 含有对象 c 的引用,那么就可以使用 a、b、c 搭建流水线
即建立一个类,该类同时组合 a、b、c 三个对象
流水线的作用是:用户只需将要处理的数据交给流水线,流水线会依次让流水线上的对象来处理数据,即流水线上首先由对象a处理数据
a 处理数据后,自动将处理的数据交给 b,b 处理数据后,自动将处理的数据交给 c
例如,在歌手比赛时,只需将评委给出的分数交给设计好的流水线,就可以得到选手的最后得分
流水线上的第一个对象负责录入裁判给选手的分数,第二个对象负责去掉一个最高分和一个最低分,最后一个对象负责计算出平均成绩
请根据下面各类的说明,用流水线完成分数评定系统
- InputScore 类的对象负责录入分数,InputScore 类组合了 DelScore 类的对象
- DelScore 类的对象负责去掉一个最高分和一个最低分,DelScore 类组合了 ComputerAver 类的对象
- ComputerAver 类的对象负责计算平均值
Line 类组合了 InputScore、 DelScore 和 ComputerAver 3 个类的实例
一个类的成员变量可以是 Java 允许的任何数据类型,因此一个类可以把某个对象作为自己的一个成员变量
该类的对象将其他对象作为自己的组成部分,这就是人们常说的 Has-A
如果一个对象 a 组合了对象 b,那么对象 a 就可以委托对象 b 调用其方法,即对象 a 以组合的方式复用对象 b 的方法
例如
class circle{
double getArea() {…….}
}
class circular {
circle bottom; // 圆锥组合圆
double height;
double getVolume() {
return bottom.getArea()*height/3.0
}
}请自行设计合理的数据
注意分析程序中有可能产生的异常,根据需要进行异常捕获和处理
Tip
请模拟实现如下情形:计算机包括主板,主板上有5个PCI插槽,可插装显卡、声卡、网卡等PCI设备。主板启动、关机时,依次启动、关闭主板上的各设备
以命令行的形式输出,展示为
【开机】显卡启动-显卡运行 声卡启动--声卡运行 网卡启动--网卡运行
【关机】显卡停止 声卡停止 网卡停止
设计思路
- ①理解接口与实现类之间的关系,以及类如何实现接口;
- ②理解何时需要应用接口数组,如何定义和使用接口数组。
- ③PCI 接口有启动、运行、关闭三个方法,显卡、声卡、网卡等类实现PCI 接口;主板上有能容纳 5个元素的 PCI 数组(代表5个PCI 插槽),另有计算机类。
Tip
假设某电商平台推出消费宝,可关联多张银行卡
支付时默认时从第一张银行卡扣款,若第一张不足以消费,则扣完第一张卡后,自动从第二张卡扣款
如此继续,若所有银行卡的余额总数不足以满足消费,则不能支付
支付后以命令行给出消费信息,向商家X支付Y元,支付情况如下:工商银行卡支付a元,余额 m元;建设银行卡支付b元,余额n元
设计思路:
- ①每个银行存取信息不同,都有ID、姓名、密码、余额、存/取、验证。关联银行卡需要验证,如关联某银行卡X时,先输入X的账号信息和密码,通过后可关联;取消关联银行卡,也要输入银行卡密码。
- ②消费宝有密码,银行卡关联成功后,支付时只需要输入消费宝密码。多卡消费时,也只需输入一次消费宝的密码。
- ③不需要文件和数据库存储。
Tip
代码在 exp2/Lineup.java
军训时,经常需要将士兵进行列队。请给出几种列队策略,在某次训练时,可以从给出的策略中选择一种策略用于列队。列队策略可以身高从低到高或按身高从高到低或不管高矮排方正队列等等,也可自行设计。
Tip
可能有很多“书写工具”,例如钢笔,圆珠笔或毛笔等,我们不想让用户看到“书写工具”的生产过程(不想让用户使用new得到类的实例)再得到这种书写工具(比如钢笔或圆珠笔等)。请使用工厂方法模式设计几个类,为用户提供几种“书写工具”,比如钢笔,毛笔或圆珠笔。
Tip
编写一个student类用来描述学生对象,创建若干学生,将其写入文件;再从文件读出学生信息,展示在屏幕上
Tip
现有一批商品数据,包含:商品编号、名称、类别、价格、库存。请使用lamda表达式和stream完成以下业务需求
按价格降序展示价格 ≥ 2000 元的前5条商品,如果商品是英文,将这些商品的名称转为大写
统计所有商品:总数量、总价、平均价、最高价、最低价
筛选高价商品(≥2000)前5条: [P001:MACBOOK(8999.0), P002:IPHONE(5999.0), P004:IPAD(3999.0), P008:MONITOR(2499.0), P006:WATCH(2199.0)] 统计结果: 总数量:20 总价:23696.0 平均价:4739.2 最高价:8999.0 最低价:2199.0
Tip
假设某一银行账户,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。现有多个顾客,每人分多次将钱(每个顾客汇入的时间和钱数不一样)汇入到该银行账户。试编写一个程序,模拟实际作业。
[基本要求] 运行程序5次,观察每次运行结果是否相同,并对现象做解释。
Tip
定义一个函数式接口 NumberFilter,其抽象方法 boolean test(int num) 用于判断一个整数是否满足某个条件。编写一个工具类 ArrayUtil,包含静态方法
public static void printFiltered(int[] arr, NumberFilter filter)用来遍历数组,只打印满足 filter.test(num) 的元素
要求调用 printFiltered 三次,用 Lambda 分别实现
- 打印所有偶数
- 打印所有大于 10 的数
- 打印所有能被 3 整除的数