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