我应该使用哪种数据类型?

时间:2015-10-15 06:32:09

标签: java data-structures

我有一组数据,我们称之为形状。

有三种形状:

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或屏幕宽度。但它们不是那么重要的细节。

5 个答案:

答案 0 :(得分:5)

你可以拥有一个名为Shape的超类,它将具有所有常见属性(x-coordinatey-coordinatecolour)。

然后,您可以使用CircleSquareLine类扩展此类,其中您将填写每个不同项目所具有的额外属性。 建议每个类都有一个单独的类文件。

如果您需要创建一组形状,这种方法可以让您创建一个List<Shape>

答案 1 :(得分:1)

我的两分钱:

另一种表示形式是给出边界框(X0, Y0, X1, Y1)(X, Y, W, H),无论形状类型如何。

对于细分市场,遗憾的是可能存在交换(Y0 <=> Y1)。区分上线和下线(内部)可能是值得的。

对于圆圈和方块,您必须强制执行约束X1-X0=Y1-Y0W=H

此方案对于轴对齐的矩形和椭圆也很方便。

您是否使用具有类型字段或虚拟化的单个类主要是品味问题。

答案 2 :(得分:0)

在Java中,或多或少都是一类。它可能与您使用的其他数据结构没有区别,例如基本Set和更精细的粒度类型,如Treeset和Hashset。所有这些都是课程。

在您的情况下,您可能需要抽象类或接口来实现常规Shape。 Circles,Squares,Lines将被实现为继承自Shape的“普通”类。

每个类使用一个源代码文件是一种惯例。特别是当源代码变大并且为不同的形状编写了许多不同的方法时,这更具可读性。

但我不明白为什么你给构造函数赋予最大值。不要忘记:构造函数创建一个对象,所以你只能给它x和y的实际值,并计算你的类之外的那些。

答案 3 :(得分:0)

使用Long表示数字。如果你需要精确的值,可以使用double和float。

答案 4 :(得分:0)

首先我要说这不是最好的解决方案,但我最终使用不同形状的工厂方法。因为我们只有3个形状并且是一个相对较小的程序。每个人上课,好像用大锤杀死一只蚂蚁。

我从所有不同的答案和意见中学到了很多东西。你们晃动并继续摇摆!

谢谢, theMobDog