在我详细介绍之前,是的,这是一个家庭作业。不,我不想回答,只是提示。赋值的方向之一就是这个
“修改您的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占据两个行星?提前谢谢。
答案 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)
你也可以通过以下方式解决这个问题:
由于您正在学习类设计,因此设计通用结构非常重要。
以上方法将允许太阳系中任意数量的行星。此外,您还可以尝试开发一种类设计,它可以代表具有所有天体和天文物体的任何太阳系的结构。