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