我正在尝试创建一个Planet类,我想将行星的速度,加速度,位置设置为默认值。我有setter函数来做到这一点,但他们期望一个双数组。将一个数字列表作为参数传递是非常方便的,因为每次初始化一个新行星时我都不想创建一个零数组。
嗯,总结一下,我想默认做这样的事情:
public Planet(){
dimension = 3;
mass = 1;
acceleration = new double[dimension];
velocity = new double[dimension];
location = new double[dimension];
this.setLocation({0,0,0}); // Is this possible?
this.setVelocity({0,0,0}); // ?
this.setAcceleration({0,0,0}); // ?
}
我的二传手看起来像这样:
public void setVelocity(double[] velocity){
for(int i = 0; i < dimension; i++){
this.velocity[i] = velocity[i];
}
}
我对Java很新,可能这是可能的,但我自己找不到解决方案。在C ++中,初始化列表可以实现这一点,但谷歌搜索建议Java没有。
答案 0 :(得分:1)
您可以使用以下语法传递一个匿名的双精度数组:
new double[]{...}
在你的情况下它会是这样的:
this.setLocation(new double[]{0,0,0});
this.setVelocity(new double[]{0,0,0});
this.setAcceleration(new double[]{0,0,0});
答案 1 :(得分:1)
在Java中,所有数组都是预初始化的(与C / C ++相反),因此在创建双精度数组时
velocity = new double[dimension];
您已使用以下值初始化
{ 0.0, 0.0, 0.0, ... }
如果您需要为每个元素分配其他值,则可以使用Arrays#fill()
方法。
答案 2 :(得分:0)
我建议您绕过setter并在默认的Planet()
构造函数中包含此行:
this.acceleration = new double[3] { 0.0, 0.0, 0.0 };
您可以对所有3个阵列执行此操作。
可以说,这是一种干净的方式来查看调用Planet()
时得到的内容,而无需跳转到检查每个数组的setter方法。
答案 3 :(得分:0)
我已经通过一些额外的更改实现了您的课程:
public class Planet {
private final int dimension;
private final int mass = 1;
private double[] acceleration;
private double[] velocity;
private double[] location;
public Planet(//You can pass all of these fields here) {
this.dimension = 3;
this.mass = 1;
this.setLocation(new double[]{0, 0, 0});
this.setVelocity(new double[]{0, 0, 0});
this.setAcceleration(new double[]{0, 0, 0});
}
public void setAcceleration(double[] acceleration) {
this.acceleration = acceleration;
}
public void setVelocity(double[] velocity) {
this.velocity = velocity;
}
public void setLocation(double[] location) {
this.location = location;
}
}
您告诉您不希望在构造函数中“创建”(初始化)数组。但是你必须至少一次初始化它们,例如你可以用其他方式:
private double[] acceleration = new double[dimension];
private double[] velocity = new double[dimension];
private double[] location = new double[dimension];
然后在构造函数中向这些数组添加值。但是这种变体只有在之前初始化尺寸时才有可能,因此它取决于您的设计。更可能的维度应该是常量,因此您可以将其初始化为:
private static final int DIMENSION = 3;
您可以使用第二种变体。如果只在构造函数中需要它们,你也可以摆脱setter。然后简单地说:
for(int i = 0; i < DIMENSION; i++) {
acceleration[i] = 0; //or some other number passed to the constructor
}