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