gpt4 book ai didi

Java 停止方法更改传递给它的变量

转载 作者:行者123 更新时间:2023-11-30 08:07:02 25 4
gpt4 key购买 nike

我正在将变量从 main 传递到另一个类中的方法。我认为可以在方法内部更改变量,而无需在 main 中更改。使用大量打印语句,我发现我的“updatePosition”方法实际上修改了变量“newVelocity”,并且修改以某种方式找到了返回主类的方式。我该如何阻止这个??这是调用该方法的主类中的循环:

//do{

projectile.updatePosition(newPosition, newVelocity, timeStep, g);
System.out.println("This is newVelocity");
newVelocity.print(); //This variable has been modified!!! Doesn't print what it should
projectile.getNewPosition();
System.out.println("This is new position");
newPosition.print();


newPositionForNewtonsLaw = newPositionForNewtonsLaw.add(distance,newPosition);
newG = earth.aDueToGravity(earthMass, earthRadius, newPositionForNewtonsLaw);

projectile.updateVelocity(newVelocity, timeStep, g, newG);
newV = projectile.getNewVelocity();
System.out.println("new velocity");
newV.print();
g=earth.aDueToGravity(earthMass, earthRadius, newPositionForNewtonsLaw);
System.out.println("This is newG");
newG.print();
g.print();
newVelocity = projectile.getNewVelocity();
positionX=newPosition.getX();
positionY=newPosition.getY();
System.out.println(positionX);
System.out.println(positionY+"y");
//}while (positionY>0);

这是修改变量的方法,尽管我确定它不应该!

public PhysicsVector updatePosition(PhysicsVector initialPosition, PhysicsVector initialVelocity, double timeStep, PhysicsVector a){

PhysicsVector v = new PhysicsVector();
v=initialVelocity;
a.scale(0.5*timeStep);
v.increaseBy(a);
v.scale(timeStep);
System.out.println("This is initialVelocity");
initialVelocity.print();

initialPosition.increaseBy(v);
return initialPosition;
}

newVelocity 是一个对象(从类到 vector ),我不知道它是否可以声明为公共(public)、静态、私有(private)等,或者这些东西是否真的有用。

最佳答案

Java 是按值传递。如果您将 PhysicsVector 对象传递给您的 updatePosition 方法,您传递的是引用的副本,它实际上指向堆上的同一对象。

您应该将对象的副本传递给 updatePosition 或在该方法中创建一个副本。

要创建副本,您可以将复制构造函数引入您的 PhysicsVector

public PhysicsVector(PhysicsVector originalVector){
// Setup the values with those contained in originalVector
}

然后您将在您的 updatePosition() 方法中实例化一个新的 PhysicsVector

PhysicsVector v = new PhysicsVector(initialVelocity);  

或者,您可以创建一个复制方法,它执行相同的操作并返回一个 PhysicsVector

关于Java 停止方法更改传递给它的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com