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

Java如何通过循环随机填充含Triangle、Circle、Rectangle对象的数组

实现思路

首先要解决两个核心问题:

  • 让三个图形类可以存到同一个引用数组里:给三个类定义共同的父类型即可
  • 随机生成对象类型和属性值:用JDK自带的java.util.Random工具类实现
具体实现步骤

1. 定义公共父类

先创建抽象父类Shape,三个图形类都继承它,这样数组类型就可以声明为Shape[]:

// 公共抽象父类,也可以用空接口代替
public abstract class Shape {
    // 公共属性:位置坐标,所有图形都有
    protected int x;
    protected int y;

    public Shape(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

你的三个已有类继承这个父类就行,比如Circle类的结构参考:

public class Circle extends Shape {
    private int radius; // 半径

    public Circle(int x, int y, int radius) {
        super(x, y);
        this.radius = radius;
    }
    // 你原有类的其他方法不用改
}

Rectangle和Triangle类同理继承Shape,构造方法传入对应参数即可,比如Triangle可以加三个边长的属性,Rectangle加长和宽属性。

2. 随机填充数组的实现代码

直接写工具方法实现随机填充:

import java.util.Random;

public class ShapeArrayGenerator {
    // 随机数实例,全局复用就行
    private static final Random RANDOM = new Random();
    // 随机值的范围,你可以根据需要调整
    private static final int MAX_POS = 1000; // 坐标最大值
    private static final int MAX_RADIUS = 50; // 圆最大半径
    private static final int MAX_SIDE = 100; // 边长最大值

    public static Shape[] generateRandomShapeArray(int length) {
        Shape[] array = new Shape[length];
        for (int i = 0; i < length; i++) {
            // 随机生成0、1、2三个值,分别对应三类图形
            int type = RANDOM.nextInt(3);
            // 先随机生成公共的坐标值
            int x = RANDOM.nextInt(MAX_POS);
            int y = RANDOM.nextInt(MAX_POS);
            switch (type) {
                case 0: // 生成Circle对象
                    int radius = RANDOM.nextInt(1, MAX_RADIUS + 1); // 半径从1开始避免0值
                    array[i] = new Circle(x, y, radius);
                    break;
                case 1: // 生成Rectangle对象
                    int width = RANDOM.nextInt(1, MAX_SIDE + 1);
                    int height = RANDOM.nextInt(1, MAX_SIDE + 1);
                    array[i] = new Rectangle(x, y, width, height);
                    break;
                case 2: // 生成Triangle对象,这里用三边长为例,你可以改成你自己的属性
                    int a = RANDOM.nextInt(1, MAX_SIDE + 1);
                    int b = RANDOM.nextInt(1, MAX_SIDE + 1);
                    int c = RANDOM.nextInt(1, MAX_SIDE + 1);
                    // 如果需要保证三边长合法可以加判断,不符合就重新生成
                    while (a + b <= c || a + c <= b || b + c <= a) {
                        a = RANDOM.nextInt(1, MAX_SIDE + 1);
                        b = RANDOM.nextInt(1, MAX_SIDE + 1);
                        c = RANDOM.nextInt(1, MAX_SIDE + 1);
                    }
                    array[i] = new Triangle(x, y, a, b, c);
                    break;
            }
        }
        return array;
    }

    // 测试方法
    public static void main(String[] args) {
        // 生成长度为10的随机图形数组
        Shape[] shapes = generateRandomShapeArray(10);
        // 遍历验证结果
        for (Shape shape : shapes) {
            System.out.println(shape.getClass().getSimpleName());
        }
    }
}
注意事项
  • 如果你不想改原有三个类的继承结构,也可以把数组类型声明为Object[],但后续取元素的时候需要强制类型转换,不推荐这种写法
  • 随机值的范围和属性都可以根据你自己的类的定义调整,比如你Triangle存的是三个顶点坐标而不是边长,就对应改随机生成的逻辑就行
  • 如果你需要固定随机种子方便复现测试结果,可以在创建Random实例的时候传入固定种子,比如new Random(123)

内容的提问来源于stack exchange,提问作者Galekwan Sango

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:00:04