0

我是 Java 的新手,刚刚玩弄了一段时间的代码。

public class ThreeVector {
private double x,y,z;   // definign local variables 

public ThreeVector(){} // a constructor that has no input

public ThreeVector (double va1,double va2, double va3){va1=x;va2=y;va3=z;};// creatign a constructor , so can be used for calling by a method later
// Takes 3 values 

public double magnitude (){
    double y1= Math.sqrt(x*x+y*y+z*z);
    return y1 ; // finds the magnitude of a vector
}

public ThreeVector unitv(){

    ThreeVector unitv= new ThreeVector ();
unitv.ThreeVector(x/magnitude(),y/magnitude(),z/magnitude());
}

现在这是我卡住的地方。我创建了一个对象unitV,所以我可以调用ThreeVector构造函数,但编译器一直说要为ThreeVector. 不知道发生了什么...

4

3 回答 3

6

只能使用new关键字调用构造函数。你在这里做什么:

unitv.ThreeVector(x/magnitude(),y/magnitude(),z/magnitude());

正在调用一个名为 的方法,因此编译器会抱怨您的类ThreeVector中没有这样的方法。ThreeVector

要解决此问题,您必须使用ThreeVector带有参数的构造函数来创建unitv实例:

public ThreeVector unitv(){
    ThreeVector unitv = new ThreeVector(x/magnitude(),y/magnitude(),z/magnitude());
    //and, of course, return this ThreeVector instance
    return unitv;
}

这段代码可以缩短为

public ThreeVector unitv() {
    return new ThreeVector(x/magnitude(),y/magnitude(),z/magnitude());
}

但是,由于您可以同时拥有,xy价值,因此最好更改方法中的逻辑以首先获取价值并进行评估,这是为了避免除以 0:z0unitvmagnitude

public ThreeVector unitv() {
    double magnitude = magnitude();
    if (magnitude != 0) {
        return new ThreeVector(x/magnitude, y/magnitude, z/magnitude);
    }
    return new ThreeVector(0, 0, 0);
}

顺便说一句,您的构造函数逻辑是错误的,您正在将字段值分配给参数,它应该是相反的:

public ThreeVector (double va1,double va2, double va3) {
    x = va1;
    y = va2;
    z = va3
}
于 2013-07-31T17:14:10.293 回答
0

不,您需要直接调用构造函数:

ThreeVector unitv= new ThreeVector(x,y,z);

只有在此之后,您才能调用幅度方法

您的构造函数也以错误的方式进行分配:

应该是: public ThreeVector (double va1,double va2, double va3){x = va1;y = va2;z=va3;}

于 2013-07-31T17:12:13.727 回答
0

您需要初始化一个new ThreeVector(va1, va2, va3).

注意力

您在构造函数中的代码是错误的。

{
    // instance field assigned to argument        
    va1=x;va2=y;va3=z;
}

... 应该:

{
    // argument assigned to instance field
    x = va1;
    y = va2;
    z = va3;
}
于 2013-07-31T17:14:40.910 回答