Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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.pow和Math.sqrt公式返回值为0_Java_Math - Fatal编程技术网

Java Math.pow和Math.sqrt公式返回值为0

Java Math.pow和Math.sqrt公式返回值为0,java,math,Java,Math,所以我认为我的数学并不差,如果我知道我在做什么,我也不认为把简单的数学距离公式翻译成代码有那么难。显然我没有。长话短说,我应该计算两个3D点之间的距离,但由于某种原因,我的公式无法正常工作。我不知道我是写错了还是有什么不对劲,因为我已经写了很多次了,但仍然不能正常工作 这是我的公共类距离,它有我的距离公式 public class Distance { Distance () {} double d; double x1, x2, y1, y2, z1, z2;

所以我认为我的数学并不差,如果我知道我在做什么,我也不认为把简单的数学距离公式翻译成代码有那么难。显然我没有。长话短说,我应该计算两个3D点之间的距离,但由于某种原因,我的公式无法正常工作。我不知道我是写错了还是有什么不对劲,因为我已经写了很多次了,但仍然不能正常工作

这是我的
公共类距离
,它有我的距离公式

public class Distance
{
    Distance () {}

    double d;
    double x1, x2, y1, y2, z1, z2;

    public void setD (double d) 
    {
        this.d = d;
    }

    double distance ()
    {
/*      return Math.sqrt ( Math.pow (( x2 - x1 ), 2 ) 
                                + Math.pow (( y2 - y1 ), 2 )
                                + Math.pow (( z2 - z1 ), 2 ));

*/
        return Math.sqrt ( ( x2 - x1 ) * ( x2 - x1 ) 
                                + ( y2 - y1 ) * ( y2 - y1 ) 
                                + ( z2 - z1 ) * ( z2 - z1 ) );
    }

}
我试着用两种方法编写它,两种方法都测试为0(我使用嵌套的
for
循环,所有变量循环到3,在为用户输入编写之前进行测试)

如果有人能解释我为什么会遇到这个问题,我将不胜感激

编辑:我知道有人告诉我初始化到某个值。我很确定我在测试循环中初始化了它,我意识到为了清晰起见我应该发布它

class Distance_test
{
    public static void main ( String [] args )
    {
        Distance line = new Distance ();

        double d;

        for ( double x1 = 0; x1 <= 2; x1++ )
        {
            line.setD ( x1 );
            d = line.distance();

            for ( double x2 = 0; x2 <= 2; x2++ )
            { 
                line.setD ( x2 );

                for ( double y1 = 0; y1 <= 2; y1++ )
                {
                    line.setD ( y1 );

                    for ( double y2 = 0; y2 <= 2; y2++ )
                    {
                        line.setD ( y2 );

                        for ( double z1 = 0; z1 <= 2; z1++ )
                        {
                            line.setD ( z1 );

                            for ( double z2 = 0; z2 <= 2; z2++ )
                            {
                                line.setD ( z2 );

                            System.out.printf ( "\n Distance of 3D line with points %.2f, %.2f, %.2f, %.2f, %.2f, %.2f is %.2f\n", x1, x2, y1, y2, z1, z2, line.distance() );   

                            }
                        }
                    }
                }
            }
        }
    }
}
class-Distance\u测试
{
公共静态void main(字符串[]args)
{
距离线=新距离();
双d;
对于(双x1=0;x1<p>),这肯定是C或java,而不是C++。
我没有看到的最大的事情是对x、y和z变量的赋值。如果这些变量没有设置,那么我希望它们是未定义的或零,这意味着结果是0


您需要设置进入Pow和Sqrt的值以获得有效结果。

x1、x2、y1、y2、z1、z2
未初始化。您应该初始化它们,而不是d,这是您的计算结果

如果内存对我有用,java就把双倍初始化为零,如果C++,变量包含随机数据,结果也会是随机的。 除此之外,您的代码还可以

另外,你应该把它实现为一个函数,而不是一个类。你得到一些输入,你就会产生一个结果——这就是一个函数

double calculateDistance(double[] point1, double[] point2)
{
x1 = point1[0]; // Or you can use enum or something for the index
y1 = point1[1];
z1 = point1[2];

x2 = point2[0];
y2 = point2[1];
z2 = point2[2];

return Math.sqrt ( Math.pow (( x2 - x1 ), 2 ) 
                                + Math.pow (( y2 - y1 ), 2 )
                                + Math.pow (( z2 - z1 ), 2 ));
}

由于这是Java,您可以将其封装在名为“MathFunctions”的静态类中也就是说,C++中的代码是“C”,不是“C++”,也就是“代码”>“X1 < /代码>,<代码> x2 < /代码>,<代码> y1 < /C>,代码> y2< /C>,代码> Z1,<代码> Z2< /代码>,如果这些变量未初始化,它们将默认为0。对不起,我正在做另一个C++任务,我的标签被混淆了。