Java 为什么Math.sqrt返回0而不是向量的长度?
然后,当我调用它们来获取我的Java 为什么Math.sqrt返回0而不是向量的长度?,java,math.sqrt,Java,Math.sqrt,然后,当我调用它们来获取我的Math.sqrt()结果时,我得到了0 public static double[] creeVec(double x, double y, double z){ //cree et retourne un tableau double[] tab = new double[3]; tab[0]=x; tab[1]=y; tab[2]=z; return tab; } public static double lo
Math.sqrt()
结果时,我得到了0
public static double[] creeVec(double x, double y, double z){
//cree et retourne un tableau
double[] tab = new double[3];
tab[0]=x;
tab[1]=y;
tab[2]=z;
return tab;
}
public static double longueur(double[] tab){
//calcule la longueur
tab = new double[3];
double carre = ((tab[0]*tab[0])+(tab[1]*tab[1])+(tab[2]*tab[2]));
return Math.sqrt(carre);
}
做:
如果形式不好,请执行以下操作:
double[] v1 = Vec3DTab.creeVec(10, 20, 30);
double[] v2 = Vec3DTab.creeVec(4, 5, 6);
但看起来你要做很多繁琐的事情才能得到
double[] v1 = Vec3DTab.creeVec(10.0, 20.0, 30.0);
double[] v2 = Vec3DTab.creeVec(4.0, 5.0, 6.0);
但你真正的问题在于:
double[] v1 = {10.0, 20.0, 30.0};
double[] v2 = {4.0, 5.0, 6.0};
publicstaticdoublelongueur(双[]选项卡){
//朗格结石
tab=新的双精度[3];//执行:
如果形式不好,请执行以下操作:
double[] v1 = Vec3DTab.creeVec(10, 20, 30);
double[] v2 = Vec3DTab.creeVec(4, 5, 6);
但看起来你要做很多繁琐的事情才能得到
double[] v1 = Vec3DTab.creeVec(10.0, 20.0, 30.0);
double[] v2 = Vec3DTab.creeVec(4.0, 5.0, 6.0);
但你真正的问题在于:
double[] v1 = {10.0, 20.0, 30.0};
double[] v2 = {4.0, 5.0, 6.0};
publicstaticdoublelongueur(双[]选项卡){
//朗格结石
tab=new double[3];//longueur(double[]tab)方法中的代码tab=new double[3];创建一个新的double数组对象,并使用默认值0进行初始化
因此它返回0
请删除此行,您将获得正确的值。longueur(double[]tab)方法中的代码tab=new double[3];创建一个新的double数组对象,并使用默认值0进行初始化
因此它返回0
请删除此行,您将获得正确的值。原因:您正在清除传递给该方法的值。因此所有数组元素都设置为零。
public static double longueur(double[] tab){
//calcule la longueur
tab = new double[3]; // <== this is hiding the tab above which has the values
// this just has zeros.
原因:您正在清除传入方法的值。因此所有数组元素都设置为零。
public static double longueur(double[] tab){
//calcule la longueur
tab = new double[3]; // <== this is hiding the tab above which has the values
// this just has zeros.
不同意省略.0
是一种不好的形式,尽管完全同意在这里定义一个简单的3-数组的明显迂回方式。我发现{10,20,30}
更容易理解。或者{10d,20d,30d}
如果你真的想明确说明类型的话。我看到初学者经常做类似于double-ftoc=9/5;
的事情;所以我认为最好让人们总是把double变成double。我知道有经验的程序员喜欢快捷方式(比如C如何允许if(intvar)
但是Java让你说if(intvar!=0)
,但它们对我来说是一个容易避免的常见错误源。我不同意省略.0
,尽管我完全同意定义简单3数组的明显迂回方式。我发现{10,20,30}
更容易看。或者{10d,20d,30d}
如果你真的想明确说明类型的话。我看到初学者经常做类似于double-ftoc=9/5;
的事情;所以我认为最好让人们总是把double变成double。我知道有经验的程序员喜欢快捷方式(比如C如何允许if(intvar)
但是Java让你说if(intvar!=0)
,但对我来说,它们是容易避免的常见错误源。