添加两个对象?

时间:2014-03-09 04:30:32

标签: java

在我详细介绍之前,是的,这是一个家庭作业。不,我不想回答,只是提示。赋值的方向之一就是这个

  

“修改您的SolarModel以允许两个行星而不是一个。”

要记住的事情:

  • SolarModel是一个创建具有Planet对象的太阳系模型的类(它是一个独立的类,带有Position,Direction和Mass参数[对于这种情况不太重要]),一个Sun对象(同样,使用它自己的位置,方向和质量参数),以及双勾选(勾号是行星旋转改变位置的时间量 - 再次,不要认为它对我遇到的问题很重要)。

  • 整个代码包基于层次结构,“为什么?” (你可能会问)。我不知道为什么,这只是我在课堂上学习的主题。

以下是我在SolarModel课程中的内容:

public class SolarModel {
    protected Sun sun;
    protected Planet planet;
    protected Planet planetb;
    protected double tick;

    public SolarModel (double tick, Sun sun, Planet planet) {
        this.tick = tick;
        this.sun = sun;
        this.planet = planet;
        }

这个代码还有更多,但对这个问题并不重要,因为它们只是getter,setter和一个使用tick来更新行星对象位置的方法......等等,等等,等等。同样,这个课程还有更多内容,但并不重要。

我的问题(重申),我如何使用相同的构造函数来使我的SolarModel占据两个行星?提前谢谢。

2 个答案:

答案 0 :(得分:3)

对于两个行星,你可以创建一个接受第二个Planet的构造函数,如@SotriosDelimanolis所建议的那样:

public SolarModel (double tick, Sun sun, Planet planet1, Planet planet2) {

如果你感觉很好,你也可以实施一个vararg,这样你就可以接受零个或多个行星了:

public SolarModel (double tick, Sun sun, Planet... planets) {

您可以这样称呼它:

SolarModel smodel = new SolarModel(3.2, aSunObj);  //No planets
SolarModel smodel2 = new SolarModel(3.2, aSunObj, earth);
SolarModel smodel3 = new SolarModel(3.2, aSunObj, earth, venus);
SolarModel smodel3 = new SolarModel(3.2, aSunObj, earth, venus, mars);

要强制执行至少两个行星,但可选择允许更多行星,请使用:

public SolarModel (double tick, Sun sun, Planet planet1, Planet planet2, Planet... planets3AndUp) {

另一种选择是接受一系列行星来代替vararg:

public SolarModel (double tick, Sun sun, Planet planet1, Planet[] planets) {
public SolarModel (double tick, Sun sun, Planet planet1, Planet planet2, Planet[] planets3AndUp) {

其中第一个被称为:

SolarModel smodel = new SolarModel(3.2, aSunObj, null);  //No planets
SolarModel smodel = new SolarModel(3.2, aSunObj, new Planet[]{});  //No planets
SolarModel smodel2 = new SolarModel(3.2, aSunObj, new Planet[]{earth});
SolarModel smodel3 = new SolarModel(3.2, aSunObj, new Planet[]{earth, venus});
SolarModel smodel3 = new SolarModel(3.2, aSunObj, new Planet[]{earth, mars});

答案 1 :(得分:1)

你也可以通过以下方式解决这个问题:

  • 而不是拥有一个行星对象,您可以将行星数组作为类定义的一部分。
  • 向班级添加额外的属性Numberofplanets。
  • 修改构造函数以包含两个参数。
  • 在构造函数中验证行星的长度与Numberofplanets参数中提到的相同。

由于您正在学习类设计,因此设计通用结构非常重要。

以上方法将允许太阳系中任意数量的行星。此外,您还可以尝试开发一种类设计,它可以代表具有所有天体和天文物体的任何太阳系的结构。