Java 弹丸运动模拟&x27;类型'的非法启动;错误
我有一门课叫PhysicsVector,它处理向量加法等问题,这门课一定很好,因为它是由我的教授写的。我的GravField类计算了g的良好估计,所以我认为这不是问题所在。没有缺少卷括号,方法外没有循环 但它仍然给出“非法开始类型”错误,并指向particle.getNewVelocity方法。在此之前,当它编译时,循环从未结束,y不断增加。所以在某个地方也有一个逻辑错误,但我真的找不到它!不管怎样,我改变了一些东西,现在它停止编译了。我的主要方法是:Java 弹丸运动模拟&x27;类型'的非法启动;错误,java,Java,我有一门课叫PhysicsVector,它处理向量加法等问题,这门课一定很好,因为它是由我的教授写的。我的GravField类计算了g的良好估计,所以我认为这不是问题所在。没有缺少卷括号,方法外没有循环 但它仍然给出“非法开始类型”错误,并指向particle.getNewVelocity方法。在此之前,当它编译时,循环从未结束,y不断增加。所以在某个地方也有一个逻辑错误,但我真的找不到它!不管怎样,我改变了一些东西,现在它停止编译了。我的主要方法是: public class Particle
public class ParticleSim{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in); //User enters initial velocity and size of time interval
double timeStep = scanner.nextDouble();
double initialXVelocity = scanner.nextDouble();
double initialYVelocity = scanner.nextDouble();
PhysicsVector initialPos = new PhysicsVector();
initialPos.setVector(0,0); //Projectile taken to start at origin
PhysicsVector initialVelocity = new PhysicsVector();
initialVelocity.setVector(initialXVelocity, initialYVelocity);
double earthMass = 5.972*Math.pow(10,24);
double earthRadius = 6371000;
PhysicsVector g = new PhysicsVector();
GravField earth = new GravField(earthMass, earthRadius, initialPos);
g = earth.aDueToGravity(earthMass, earthRadius, initialPos); //Calculates acceleration due to gravity
//using method in GravField class
Particle projectile = new Particle(1, initialPos, initialVelocity, timeStep, g);
double positionY;
PhysicsVector newPosition= new PhysicsVector();
PhysicsVector newVelocity = new PhysicsVector();
do{
newPosition = projectile.getNewPosition(); //should get the new position of projectile
g=earth.aDueToGravity(earthMass, earthRadius, newPosition); //g in new position
newVelocity = projectile.getNewVelocity();
positionY = projectile.positionY();
}while (positionY>0);
}
然后我的粒子类:
public class Particle{
private double mass;
PhysicsVector initialPosition = new PhysicsVector();
PhysicsVector initialVelocity = new PhysicsVector();
public Particle(){
mass = 1;
initialPosition.setVector(0,0);
initialVelocity.setVector(1,1);
}
public Particle(double mass, PhysicsVector a, PhysicsVector b, double timeStep, PhysicsVector aDueToGravity){
initialPosition = a;
initialVelocity = b;
PhysicsVector v = new PhysicsVector();
v = initialVelocity;
v = v.scale(timeStep, initialVelocity); //v = initialVelocity *t
PhysicsVector a = new PhysicsVector();
a = a.scale(timeStep, aDueToGravity); //a = aDueToGravity*t
initialPosition.increaseBy(v); //initialPosition = initialPosition + v
initialVelocity.increaseBy(a); //initialVelocity = initialVelocity + a
initialPosition.print();
initialVelocity.print();
}
public double positionY(){
return initialPosition.getY(); //get y component with method in PhysicsVector
}
public PhysicsVector getNewVelocity(){
//'illegal start of type' error
return initialVelocity;
}
public PhysicsVector getNewPosition(){
//Same error here, 'illegal start of type'
return initialPosition;
}
}
GravField类:
public class GravField{
public static final double G = 6.674*Math.pow(10,-11);
private double planetMass;
private double planetRadius;
PhysicsVector initialPosition = new PhysicsVector();
PhysicsVector distance = new PhysicsVector();
PhysicsVector gravityAcceleration = new PhysicsVector();
/**
*Default constructor that creates a GravField object with the mass and radius of the earth,
*acting on a projectile starting at x=0, y=0, where the x and y axes are on the surface of the planet
*/
public GravField(){
double planetMass = 5.972*Math.pow(10,24);
double planetRadius = 6371000;
}
/**
*Constructor that creates a GravField object
*@param planetMass Mass of the planet whose field is to be calculated
*@param planetRadius Radius of the planet
*@param projectileX initial x co-ordinate of a projectile moving in the planet's gravitational field
*@param projectileY initial y co-ordinate of the projectile
*/
public GravField(double mass, double radius, PhysicsVector initialPos){
planetMass = mass;
planetRadius = radius;
initialPosition = initialPos;
}
//Calculates the acceleration due to the gravitational field of the object
public PhysicsVector aDueToGravity(double planetMass, double planetRadius, PhysicsVector initialPosition){
double y = planetRadius;
double x = 0;
distance.setVector(x,y);
initialPosition.increaseBy(distance);
double initialX = initialPosition.getX();
double initialY = initialPosition.getY();
double distance = Math.sqrt((initialX)*(initialX)+initialY*initialY);
double a = (-1*G*planetMass*initialX)/(distance*distance*distance);
double b = (-1*G*planetMass*(initialY))/(distance*distance*distance);
gravityAcceleration.setVector(a,b);
System.out.println("printing g");
gravityAcceleration.print();
return gravityAcceleration;
}
public double magnitude(){
return gravityAcceleration.magnitude();
}
public double componentX(){
return gravityAcceleration.getX();
}
public double componentY(){
return gravityAcceleration.getY();
}
}
在第二个粒子构造函数中,有一个重复的局部变量“a”。传入一个名为“a”的PhysicsVector,并声明另一个名为“a”的PhysicsVector变量
这是我看到的唯一问题,因为我没有PhysicsVector类。尝试修复它,看看是否有帮助。在第二个粒子构造函数中有一个重复的局部变量“a”。传入一个名为“a”的PhysicsVector,并声明另一个名为“a”的PhysicsVector变量
这是我看到的唯一问题,因为我没有PhysicsVector类。尝试修复它,看看是否有帮助。我所做的是创建了一个PhysicsVector类:
public class PhysicsVector {
double y;
public void setVector(int i, int i1) {
}
public PhysicsVector scale(double timeStep, PhysicsVector initialVelocity) {
return initialVelocity;
}
public void increaseBy(PhysicsVector a) {
}
public double getY() {
return y;
}
public void print() {
}
}
我的粒子类看起来像:
public class Particle{
private double mass;
private PhysicsVector initialPosition = new PhysicsVector();
private PhysicsVector initialVelocity = new PhysicsVector();
public Particle(){
mass = 1;
initialPosition.setVector(0,0);
initialVelocity.setVector(1,1);
}
public Particle(double mass, PhysicsVector a, PhysicsVector b, double timeStep, PhysicsVector aDueToGravity){
initialPosition = a;
initialVelocity = b;
PhysicsVector v = new PhysicsVector();
v = initialVelocity;
v = v.scale(timeStep, initialVelocity); //v = initialVelocity *t
PhysicsVector a = new PhysicsVector();
a = a.scale(timeStep, aDueToGravity); //a = aDueToGravity*t
initialPosition.increaseBy(v); //initialPosition = initialPosition + v
initialVelocity.increaseBy(a); //initialVelocity = initialVelocity + a
initialPosition.print();
initialVelocity.print();
}
public double positionY(){
return initialPosition.getY(); //get y component with method in PhysicsVector
}
public PhysicsVector getNewVelocity(){
return initialVelocity;
}
public PhysicsVector getNewPosition(){
return initialPosition;
}
}
我得到的唯一错误/警告是变量“a”已在作用域中定义。
我肯定你在你的问题上遗漏了一些信息,或者问题代码与你的代码不同
创建一个示例来演示您的问题。这将帮助您更好地理解和解决问题我所做的是创建一个PhysicsVector类:
public class PhysicsVector {
double y;
public void setVector(int i, int i1) {
}
public PhysicsVector scale(double timeStep, PhysicsVector initialVelocity) {
return initialVelocity;
}
public void increaseBy(PhysicsVector a) {
}
public double getY() {
return y;
}
public void print() {
}
}
我的粒子类看起来像:
public class Particle{
private double mass;
private PhysicsVector initialPosition = new PhysicsVector();
private PhysicsVector initialVelocity = new PhysicsVector();
public Particle(){
mass = 1;
initialPosition.setVector(0,0);
initialVelocity.setVector(1,1);
}
public Particle(double mass, PhysicsVector a, PhysicsVector b, double timeStep, PhysicsVector aDueToGravity){
initialPosition = a;
initialVelocity = b;
PhysicsVector v = new PhysicsVector();
v = initialVelocity;
v = v.scale(timeStep, initialVelocity); //v = initialVelocity *t
PhysicsVector a = new PhysicsVector();
a = a.scale(timeStep, aDueToGravity); //a = aDueToGravity*t
initialPosition.increaseBy(v); //initialPosition = initialPosition + v
initialVelocity.increaseBy(a); //initialVelocity = initialVelocity + a
initialPosition.print();
initialVelocity.print();
}
public double positionY(){
return initialPosition.getY(); //get y component with method in PhysicsVector
}
public PhysicsVector getNewVelocity(){
return initialVelocity;
}
public PhysicsVector getNewPosition(){
return initialPosition;
}
}
我得到的唯一错误/警告是变量“a”已在作用域中定义。
我肯定你在你的问题上遗漏了一些信息,或者问题代码与你的代码不同
创建一个示例来演示您的问题。这将帮助您更好地理解和解决问题同一个包中是否有PhysicsVector类?你能分享PhysicsVector的代码吗。可能是构造函数是私有的,或者您需要向它传递一些值。@StackFlowed Yes。使用PhysicsVector和PhysicsVector方法的早期版本已经编译。仔细查看您的代码,如果删除这些行,您的代码应该可以正常工作。实际上,您只需要返回initialVelocity;&返回初始位置;仅供参考,在创建newVelocity但使用newPosition时,getNewPosition出现编译错误。PhysicsVector是否声明为公共?您需要发布所有代码。没有它很难把发生的事情拼凑起来。在同一个包中有PhysicsVector类吗?你能分享PhysicsVector的代码吗。可能是构造函数是私有的,或者您需要向它传递一些值。@StackFlowed Yes。使用PhysicsVector和PhysicsVector方法的早期版本已经编译。仔细查看您的代码,如果删除这些行,您的代码应该可以正常工作。实际上,您只需要返回initialVelocity;&返回初始位置;仅供参考,在创建newVelocity但使用newPosition时,getNewPosition出现编译错误。PhysicsVector是否声明为公共?您需要发布所有代码。如果没有它,很难将正在发生的事情拼凑起来。仍然无法编译,但这会导致后续问题!谢谢。基本上,我想在主方法中使用位置和速度的计算值。我无法直接从构造函数中获取它们,这就是为什么我尝试使用单独的方法来获取位置和速度。有没有更简单的方法?我不清楚你的程序想做什么,所以我不能回答这个问题。我会说你的代码对我来说很好。然而,我不得不创建我自己的PhysicsVector版本。仍然无法编译,但这会导致后续问题!谢谢。基本上,我想在主方法中使用位置和速度的计算值。我无法直接从构造函数中获取它们,这就是为什么我尝试使用单独的方法来获取位置和速度。有没有更简单的方法?我不清楚你的程序想做什么,所以我不能回答这个问题。我会说你的代码对我来说很好。但是我必须创建自己版本的PhysicsVector。非常好的主意!!!帮我找到了错误!谢谢,有很多代码需要处理。很高兴它能帮上忙。别忘了在问题结束时将此标记为正确答案。好主意!!!帮我找到了错误!谢谢,有很多代码需要处理。很高兴它能帮上忙。别忘了在问题结束时将此标记为正确答案。