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
相关产品推荐
相关产品推荐

