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

时间:2014-10-02 22:35:24

标签: java math

所以我认为我不擅长数学,而且如果我知道自己在做什么,我认为将简单的数学距离公式转换成代码并不困难。显然我没有。长话短说,我应该计算两个3D点之间的距离,由于某种原因,我的公式不能正常工作。我不知道我是不是写错了,或者是否有什么东西是关闭的,因为我已多次写它并且它仍然无法正常工作。

这是我的public class Distance,它有我的距离公式

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

                            }
                        }
                    }
                }
            }
        }
    }
}

是的,我觉得它有点乱,但我只是想让它先工作才能让它看起来更好。

2 个答案:

答案 0 :(得分:2)

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,你可以将它包装在名为&#34; MathFunctions&#34;的静态类中。或类似的东西。

答案 1 :(得分:0)

这绝对是C#或Java,而不是C ++。

我没有看到的最重要的事情是对x,y和z变量的赋值。如果没有设置,那么我希望它们是未定义的或零,这意味着结果将是0。

您需要设置那些进入Pow和Sqrt的值才能获得有效的结果。