我试图模拟地球围绕太阳的轨道,使其打印出当前的位置。我是java的新手,无法打印" newP"在循环中正确排列数组。目前我正在使用 -
System.out.println(Arrays.deepToString(newP));
我也尝试过:
System.out.println(Arrays.toString(newP));
无济于事。我也肯定也导入了java util数组,我不确定为什么它不起作用。代码中也没有出现其他错误。代码的循环如下:
do{
PhysicsVector[] y = new PhysicsVector[gravField.length];
y=copyArray(gravField);
for(int i=0; i<planets.length;i++){
newP[i] = planets[i].updatePosition(position[i], velocity[i], timeStep, gravField[i]);
}
for(int j=0; j<gravityObject.length; j++){
for(int l=0;l<gravityObject.length;l++){
if(j!=l){
newGrav[j].increaseBy(gravityObject[j].aDueToGravity(planetMass[l], newP[l], newP[j]));
}
}
}
for(int k=0; k<planets.length; k++){
newVel[k] = planets[k].updateVelocity(velocity[k], timeStep, y[k], newGrav[k]);
}
time+=timeStep;
double x = newP[0].getX();
double ap = newP[0].getY();
n.println(x+" "+ap);
System.out.println(Arrays.deepToString(newP));
}while (timeStep<(24*60*60*365.25));
尝试在循环中打印数组时得到的输出如下
[PhysicsVector@15db9742, PhysicsVector@6d06d69c, PhysicsVector@7852e922]
[PhysicsVector@15db9742, PhysicsVector@6d06d69c, PhysicsVector@7852e922]
[PhysicsVector@15db9742, PhysicsVector@6d06d69c, PhysicsVector@7852e922]
[PhysicsVector@15db9742, PhysicsVector@6d06d69c, PhysicsVector@7852e922]
I期望的输出是矢量列表。 提前谢谢。
答案 0 :(得分:2)
您正在查看toString()
类中定义的默认java.lang.Object
实现的输出。要获得不同的输出,您有两个主要选项
覆盖PhysicsVector类中的toString()
以返回对象内容的某种格式化String。这只涉及向PhysicsVector类添加一个方法,如...
public class PhysicsVector {
....
@Override
public String toString() {
return "PhysicsVector[" + this.getX() + ", " + this.getY() + "]";
}
使用某种地图将PhysicsVector []转换为String []。在Java8中,这可能看起来像
final String[] outputArray = Arrays.stream(newP).map((p) -> "PhysicsVector[" + p.getX() + ", " + p.getY() + "]").toArray()
如果您不使用Java8,则可能需要使用循环...
final String[] outputArray = new String[newP.length]
for (int i = 0; i< newP.length; i++) {
outputArray[i] = "PhysicsVector[" + newP[i].getX() + ", " + newP[i].getY() + "]";
}