地球绕太阳模拟对象阵列无法正确打印java

时间:2016-01-05 22:07:47

标签: java arrays

我试图模拟地球围绕太阳的轨道,使其打印出当前的位置。我是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期望的输出是矢量列表。 提前谢谢。

1 个答案:

答案 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() + "]";
}