Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Math.sqrt返回0而不是向量的长度?_Java_Math.sqrt - Fatal编程技术网

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)
,但对我来说,它们是容易避免的常见错误源。