gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:24:45 26 4
gpt4 key购买 nike

所以我不认为我数学不好,而且如果我知道自己在做什么,我也不认为将简单的数学距离公式翻译成代码那么困难。显然我不这么认为。长话短说,我应该计算两个 3D 点之间的距离,但由于某种原因,我的公式无法正常工作。我不知道是我写错了还是哪里出了问题,因为我已经写了很多次了,但还是不行。

这是我的公共(public)类距离,其中有我的距离公式

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

}
}
}
}
}
}
}
}

是的,我确实认为这有点乱,但我只是想让它先工作,然后再让它看起来更好。

最佳答案

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

如果我没记错的话,Java 会将 double 初始化为零,如果这是 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”的静态类或类似的内容中。

关于java - Math.pow 和 Math.sqrt 公式返回值 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com