1
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);
4

3 回答 3

4

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

因此它返回 0。

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

于 2016-01-29T04:10:30.967 回答
1

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

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

解决方案:去掉tab数组的新初始化

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);
}
于 2016-01-29T04:12:45.047 回答
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.
于 2016-01-29T04:08:24.440 回答