我有一组数据,我们称之为形状。
有三种形状:
1) circle :
x-coordinate
y-coordinate
r-radius
c-color
2) square:
x-coordinate
y-coordinate
s-side
c- color
3) line:
x-coordinate
y-coordinate
x1-coordinate
y1-coordinate
c- color
哪种数据类型最适合?我应该制作一个形状类,并将圆形,方形和线条作为形状的子类吗?如果我这样做,我可以将它们全部放在一个类文件中吗?
作为旁注: 创建每个形状时,构造函数将只给出maxX和maxY。形状将使用随机数自动生成,其将保持在(0,0,maxX,maxY)内的入站。它们的尺寸也是由用户决定的。我保持它们从1/10到1/3或屏幕宽度。但它们不是那么重要的细节。
答案 0 :(得分:5)
你可以拥有一个名为Shape
的超类,它将具有所有常见属性(x-coordinate
,y-coordinate
和colour
)。
然后,您可以使用Circle
,Square
和Line
类扩展此类,其中您将填写每个不同项目所具有的额外属性。 建议每个类都有一个单独的类文件。
如果您需要创建一组形状,这种方法可以让您创建一个List<Shape>
。
答案 1 :(得分:1)
我的两分钱:
另一种表示形式是给出边界框(X0, Y0, X1, Y1)
或(X, Y, W, H)
,无论形状类型如何。
对于细分市场,遗憾的是可能存在交换(Y0 <=> Y1
)。区分上线和下线(内部)可能是值得的。
对于圆圈和方块,您必须强制执行约束X1-X0=Y1-Y0
或W=H
。
此方案对于轴对齐的矩形和椭圆也很方便。
您是否使用具有类型字段或虚拟化的单个类主要是品味问题。
答案 2 :(得分:0)
在Java中,或多或少都是一类。它可能与您使用的其他数据结构没有区别,例如基本Set和更精细的粒度类型,如Treeset和Hashset。所有这些都是课程。
在您的情况下,您可能需要抽象类或接口来实现常规Shape。 Circles,Squares,Lines将被实现为继承自Shape的“普通”类。
每个类使用一个源代码文件是一种惯例。特别是当源代码变大并且为不同的形状编写了许多不同的方法时,这更具可读性。
但我不明白为什么你给构造函数赋予最大值。不要忘记:构造函数创建一个对象,所以你只能给它x和y的实际值,并计算你的类之外的那些。
答案 3 :(得分:0)
使用Long表示数字。如果你需要精确的值,可以使用double和float。
答案 4 :(得分:0)
首先我要说这不是最好的解决方案,但我最终使用不同形状的工厂方法。因为我们只有3个形状并且是一个相对较小的程序。每个人上课,好像用大锤杀死一只蚂蚁。
我从所有不同的答案和意见中学到了很多东西。你们晃动并继续摇摆!
谢谢, theMobDog