第十二次实验

1.宠物店管理系统的一个优化思路

老张在宠物店管理系统中写了一大堆Cat啊、Dog啊这样的宠物类,发现在这些类中有些信息使用的次数很少,甚至是一些字段很多情况下只能有一部分被使用,比如Cat的特征字段feature,有些时候需要用字符串类型,有些时候需要使用数值类型,于是定义了一堆strFeature,intFeature这样的东西,老张看到Java泛型的使用方法后心里琢磨了起来,如果使用泛型能不能简化Cat这样的类的结构呢?于是老张写出了测试程序:

public static void main(String[] args) {
        Cat<String> cat = new Cat<>();
        cat.setFeature("肥胖");
        System.out.println(cat.desc());
        Cat<Integer> cat2 = new Cat<>();
        cat2.setFeature(13);
        System.out.println(cat2.desc());
        Cat<Double> cat3 = new Cat<>();
        cat3.setFeature(12.1);
        System.out.println(cat3.desc());
    }

期望的输出为:

此猫猫是一只可爱的肥胖猫咪
此猫猫是一只体重为13的猫猫
此猫猫特征不明,有人认为它的特征为12.1

你能帮老张完成这个Cat类吗?
老张还想让所有的宠物都有生育方法,比如猫应该有方法Cat birth()来生一只小猫,狗能使用Dog birth()方法生一只小狗,能不能定义一个接口来完成这个事情,让实现这个接口的类都有适当的birth方法呢?

2.雄心万丈的老张

在开发过程中的顺风顺水让老张自我膨胀了起来,一天老张忽然觉得自己的团队成员应该有能力封装java的任何一个成熟类型,于是找到团队里的你,让你试着做一个团队自己的泛型类ArrayList,主要实现以下几个功能:
1. 必须是泛型类,能装下任何指定类型的数据
2. 必须可以进行空间扩展,空间不足的时候可以通过翻倍内部数据空间的方法得到更多的空间容纳新数据
3. 可以添加数据
4. 可以删除数据
5. 可以取指定位置的数据
6. 可以获得空间中有效数据的个数
7. 可以使用for枚举空间中所有数据
你能帮老张做到吗?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个 C 语言的示例代码,可以实现你所描述的功能: ```c #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_STUDENT_NUM 50 // 最大学生数 struct student { int num; // 学号 char name[20]; // 姓名 int age; // 年龄 }; // 按学号从小到大排序 int cmp_by_num(const void* a, const void* b) { return ((struct student*)a)->num - ((struct student*)b)->num; } // 按姓名从小到大排序 int cmp_by_name(const void* a, const void* b) { return strcmp(((struct student*)a)->name, ((struct student*)b)->name); } // 按年龄从小到大排序 int cmp_by_age(const void* a, const void* b) { if (((struct student*)a)->age != ((struct student*)b)->age) { return ((struct student*)a)->age - ((struct student*)b)->age; } else { return strcmp(((struct student*)a)->name, ((struct student*)b)->name); } } int main() { int n; scanf("%d", &n); struct student stu[MAX_STUDENT_NUM]; // 输入学生信息 for (int i = 0; i < n; i++) { scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].age); } // 按学号从小到大排序 qsort(stu, n, sizeof(struct student), cmp_by_num); // 按姓名从小到大排序输出 qsort(stu, n, sizeof(struct student), cmp_by_name); for (int i = 0; i < n; i++) { printf("%3d %-6s %3d\n", stu[i].num, stu[i].name, stu[i].age); } printf("\n"); // 按年龄从小到大排序输出 qsort(stu, n, sizeof(struct student), cmp_by_age); for (int i = 0; i < n; i++) { printf("%3d %-6s %3d\n", stu[i].num, stu[i].name, stu[i].age); } printf("\n"); return 0; } ``` 该代码定义了一个 `struct student` 结构体,包括学号、姓名和年龄。在主函数中,首先输入学生数 `n`,然后定义一个长度为 `MAX_STUDENT_NUM` 的学生数组,并通过循环输入每个学生的信息。接着,分别定义了三个比较函数 `cmp_by_num`、`cmp_by_name` 和 `cmp_by_age`,用于排序。最后,分别按姓名和年龄从小到大排序输出学生信息。其中,姓名和年龄相同时,按姓名从小到大排序输出。两种排序方式输出结果之间用一行空行相隔。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值