You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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());
        }
    }
}

关键逻辑拆解:

  1. 随机类型选择:
    用random.nextBoolean()随机返回true或false,以此决定创建Graduate还是Undergraduate实例。如果想自定义两种类型的生成比例,也可以用random.nextInt(2)返回0或1来做判断。

  2. 随机参数生成:

    • ID:这里设置了1000-1999的范围,你可以根据需求修改,比如用random.nextInt(10000)生成0-9999的ID。
    • GPA:通过random.nextDouble() * 4.0生成0.0到4.0之间的随机小数,再用Math.round()保留两位小数,避免输出过长的小数位。
  3. 对象存储与遍历:
    利用Java多态特性,把所有子类实例存入List<Student>列表,之后遍历列表调用每个对象的displayStudent()方法,就能统一输出所有学生的信息。

小提示:

  • 上面的代码已经控制GPA在0.0-4.0之间,能避免Undergraduate出现invalid GPA!的状态;如果需要测试异常情况,可以去掉GPA范围限制。
  • 要是想让每次运行生成相同的随机序列,可以给Random设置固定种子,比如new Random(123)。

运行这段代码后,就能得到10个随机类型的学生对象,并且打印出他们的完整信息啦!

内容的提问来源于stack exchange,提问作者06ov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:28:13