如何在Java中随机生成抽象类的子类对象?——生成10个Graduate与Undergraduate实例并调用displayStudent方法
解决随机生成Graduate/Undergraduate实例的问题
别担心,这个问题其实很容易搞定!核心思路就是借助Java的Random类随机决定每次创建的学生对象类型,同时生成对应的随机ID和GPA参数,最后把所有Student对象收集起来,遍历调用displayStudent()方法就行。
下面是完整的实现代码,我会在后面拆解关键部分:
import java.util.ArrayList; import java.util.List; import java.util.Random; public class StudentTest { public static void main(String[] args) { // 初始化Random实例用于生成随机数 Random random = new Random(); // 用列表存储生成的10个学生对象 List<Student> studentList = new ArrayList<>(); for (int i = 0; i < 10; i++) { // 生成1000-1999范围的随机ID,可按需调整区间 int randomId = 1000 + random.nextInt(1000); // 生成0.0到4.0之间的随机GPA,符合常规GPA范围 double randomGpa = random.nextDouble() * 4.0; // 保留两位小数,让GPA显示更贴近真实场景 randomGpa = Math.round(randomGpa * 100.0) / 100.0; // 随机选择创建Graduate或Undergraduate实例 Student student; if (random.nextBoolean()) { student = new Graduate(randomId, randomGpa); } else { student = new Undergraduate(randomId, randomGpa); } // 将生成的学生对象加入列表 studentList.add(student); } // 遍历列表,打印每个学生的信息 System.out.println("生成的10名学生信息:"); for (Student s : studentList) { System.out.println(s.displayStudent()); } } }
关键逻辑拆解:
随机类型选择:
用random.nextBoolean()随机返回true或false,以此决定创建Graduate还是Undergraduate实例。如果想自定义两种类型的生成比例,也可以用random.nextInt(2)返回0或1来做判断。随机参数生成:
- ID:这里设置了1000-1999的范围,你可以根据需求修改,比如用
random.nextInt(10000)生成0-9999的ID。 - GPA:通过
random.nextDouble() * 4.0生成0.0到4.0之间的随机小数,再用Math.round()保留两位小数,避免输出过长的小数位。
- ID:这里设置了1000-1999的范围,你可以根据需求修改,比如用
对象存储与遍历:
利用Java多态特性,把所有子类实例存入List<Student>列表,之后遍历列表调用每个对象的displayStudent()方法,就能统一输出所有学生的信息。
小提示:
- 上面的代码已经控制GPA在0.0-4.0之间,能避免
Undergraduate出现invalid GPA!的状态;如果需要测试异常情况,可以去掉GPA范围限制。 - 要是想让每次运行生成相同的随机序列,可以给Random设置固定种子,比如
new Random(123)。
运行这段代码后,就能得到10个随机类型的学生对象,并且打印出他们的完整信息啦!
内容的提问来源于stack exchange,提问作者06ov
相关产品推荐
相关产品推荐

