gpt4 book ai didi

java - 从构造函数创建对象

转载 作者:行者123 更新时间:2023-12-01 08:10:22 25 4
gpt4 key购买 nike

我是 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 创建一个新方法。不知道发生了什么...

最佳答案

只能使用 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());
}

但是由于您可以同时将 xyz 值设为 0,最好更改 unitv 方法中的逻辑,首先获取 magnitude 值并进行评估,以避免被 0 除:

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
}

关于java - 从构造函数创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976681/

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