为什么Math.sqrt返回0而不是向量的长度?

时间:2016-01-29 04:03:56

标签: java math.sqrt

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);
}

然后当我打电话给他们得到Math.sqrt()的结果时,我得到0

    double[] v1 = Vec3DTab.creeVec(10, 20, 30);
    double[] v2 = Vec3DTab.creeVec(4, 5, 6);

    //affiche la longueur de v1
    double LongueurV1 = Vec3DTab.longueur(v1);
    System.out.println(LongueurV1);

3 个答案:

答案 0 :(得分:4)

longueur(double [] tab)方法中的代码 tab = new double [3]; 创建一个新的double数组对象,并使用默认值0初始化。

因此它返回0.

请删除此行,您将获得适当的价值。

答案 1 :(得分:1)

这样做的:

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};

但你真正的问题在于:

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.

答案 2 :(得分:1)

原因:您正在清除传入方法的值。因此所有数组元素都设置为零。

//calcule la longueur
 tab = new double[3];     //  <-- here are you clearing the vector

<强>解决方案: 删除选项卡数组的新初始化

public static double longueur(double[] tab){
    //calcule la longueur
    double carre = ((tab[0]*tab[0])+(tab[1]*tab[1])+(tab[2]*tab[2]));
    return Math.sqrt(carre);
}