Java 创建表示多边形的类而不是存储在数组中

Java 创建表示多边形的类而不是存储在数组中,java,class,draw,Java,Class,Draw,我的任务是改进一段代码。该代码旨在绘制不同的多边形。初始代码有一个构造函数,它将多边形的名称(如“三角形”、“正方形”和“矩形”)添加到ArrayList中。另一个ArrayList包含每个多边形的中心点。我已经得到暗示,为每个多边形创建一个类将改进代码,因为它早在编译状态时就阻止了错误,例如用户可能会错误地键入多边形名称。我对编码相当陌生,所以我真的不知道如何实际实现它。有人能举例说明这样一个类的外观吗?您可以为多边形类型创建一个Enum,如下所示: public enum PolygonTy

我的任务是改进一段代码。该代码旨在绘制不同的多边形。初始代码有一个构造函数,它将多边形的名称(如“三角形”、“正方形”和“矩形”)添加到ArrayList中。另一个ArrayList包含每个多边形的中心点。我已经得到暗示,为每个多边形创建一个类将改进代码,因为它早在编译状态时就阻止了错误,例如用户可能会错误地键入多边形名称。我对编码相当陌生,所以我真的不知道如何实际实现它。有人能举例说明这样一个类的外观吗?

您可以为多边形类型创建一个
Enum
,如下所示:

public enum PolygonType{
    TRIANGLE, SQUARE, RECTANGLE, PENTAGON, HEXAGON
}
并创建一个类,该类表示多边形的单个实例:

public class Polygon {
    private final PolygonType type;
    
    //Use whatever Point class you use now here
    private final Point2D center;

    public Polygon(PolygonType type, Point2D center) {
         this.type = type;
         this.center = center;
    }

    public PolygonType getType() {
         return type;
    }
    public Point2D getCenter() {
         return center;
    }
}
然后创建一个
列表

如果不想对类型使用枚举,也可以只存储边数,或将类型存储为字符串。我更喜欢使用
enum
,因为不能使用错误的值

如果需要,还可以通过添加字段和构造函数(构造函数应该是
私有的
),为枚举提供其他信息,例如边数:

公共枚举多边形类型{
三角形(3)、正方形(4)、矩形(4);
公共和国际方面;
私有多边形类型(int sides){this.sides=sides;}
} 

您可以为多边形类型创建一个
枚举,如下所示:

public enum PolygonType{
    TRIANGLE, SQUARE, RECTANGLE, PENTAGON, HEXAGON
}
并创建一个类,该类表示多边形的单个实例:

public class Polygon {
    private final PolygonType type;
    
    //Use whatever Point class you use now here
    private final Point2D center;

    public Polygon(PolygonType type, Point2D center) {
         this.type = type;
         this.center = center;
    }

    public PolygonType getType() {
         return type;
    }
    public Point2D getCenter() {
         return center;
    }
}
然后创建一个
列表

如果不想对类型使用枚举,也可以只存储边数,或将类型存储为字符串。我更喜欢使用
enum
,因为不能使用错误的值

如果需要,还可以通过添加字段和构造函数(构造函数应该是
私有的
),为枚举提供其他信息,例如边数:

公共枚举多边形类型{
三角形(3)、正方形(4)、矩形(4);
公共和国际方面;
私有多边形类型(int sides){this.sides=sides;}
} 

您可以创建一个
形状类型
,作为识别形状的一种方法

然后,您可以创建一个表示
形状的
抽象类
,然后通过创建各种多边形和几何形状对其进行扩展

如果所有形状都有类型、位置(原点)和大小,则可以通过
开关
语句处理该类型来创建该类型的形状


演示 下面的示例生成10-50个随机颜色的随机形状,大小为画布宽度的5%-10%,并将其放置在画布中心最大距离的1/3范围内

import javax.swing.*;
导入java.awt.*;
导入java.awt.geom.Point2D;
导入java.lang.reflect.InvocationTargetException;
导入java.util.List;
导入java.util.*;
导入java.util.stream.collector;
公共类应用程序实现可运行{
私有枚举形状类型{
圆、六边形、五边形、矩形、正方形、三角形;
}
私有静态抽象类形状{
私有形状类型;
私有点源;
私人色彩;
保护布尔脏;
受保护地图属性;
公共形状类型getType(){
返回类型;
}
公共点2d getOrigin(){
返回原点;
}
公共无效集合原点(点2D原点){
this.origin=origin;
this.dirty=true;
}
公共颜色getColor(){
返回颜色;
}
公共空间设置颜色(颜色){
这个颜色=颜色;
this.dirty=true;
}
公共映射getAttributes(){
返回属性;
}
公共形状(形状类型、点2D原点、颜色){
this.type=type;
this.origin=origin;
这个颜色=颜色;
this.attributes=newhashmap();
this.dirty=true;
}
受保护的void attr(字符串属性、对象值){
this.attributes.put(属性,值);
}
受保护对象属性(字符串属性){
返回this.attributes.get(attribute);
}
受保护的void重新计算(){
syncAttributes();
this.dirty=false;
}
受保护的void syncAttributes(){
int rgb=(this.getColor().getRGB()>>8;
attr(“color”,String.format(“#%06X”,rgb));
attr(“x”,getOrigin().getX());
属性(“y”,getOrigin().getY());
}
公开摘要作废图(图2D-g2d);
}
私有静态类矩形扩展形状{
私人INTX;
私营企业;
私有整数宽度;
私人内部高度;
公共int getWidth(){
返回宽度;
}
公共void setWidth(int-width){
这个。宽度=宽度;
this.dirty=true;
}
公共整数getHeight(){
返回高度;
}
公共空间设置高度(内部高度){
高度=高度;
this.dirty=true;
}
公共矩形(点2D原点、颜色、整数宽度、整数高度){
super(ShapeType.RECTANGLE、原点、颜色);
这个。宽度=宽度;
高度=高度;
}
@凌驾
受保护的void syncAttributes(){
super.syncAttributes();
attr(“width”,this.getWidth());
attr(“height”,this.getHeight());
}
@凌驾
受保护的void重新计算(){
this.x=(int)getOrigin().getX()-this.width/2;
this.y=(int)getOrigin().getY()-this.height/2;
super.重新计算();
}
@O