获取NaN作为简单Java程序的答案 我最近在学习java,所以我开始把C++中的程序转换成java,但是当我计算距离时,我把楠作为答案。谁能告诉我这里有什么问题吗?非常感谢。 代码如下: import java.util.Scanner; import java.lang.Math; public class Labsheet1Number1 { public static void main(String[] args) { double length=0,height=0,pi=3.142; double distance=0,angle=0; Scanner input = new Scanner(System.in); System.out.println("This program will calculate the distance and the angle."); System.out.print("Enter the length of the ladder: "); length = input.nextInt(); System.out.print("Enter the height of the wall: "); height = input.nextInt(); distance = Math.sqrt(Math.pow(length, 2) - Math.pow(height, 2)); angle = (180/pi) * (Math.sin(height/length)); System.out.println("The distance is " + distance); System.out.println("The angle is " + angle); } }

获取NaN作为简单Java程序的答案 我最近在学习java,所以我开始把C++中的程序转换成java,但是当我计算距离时,我把楠作为答案。谁能告诉我这里有什么问题吗?非常感谢。 代码如下: import java.util.Scanner; import java.lang.Math; public class Labsheet1Number1 { public static void main(String[] args) { double length=0,height=0,pi=3.142; double distance=0,angle=0; Scanner input = new Scanner(System.in); System.out.println("This program will calculate the distance and the angle."); System.out.print("Enter the length of the ladder: "); length = input.nextInt(); System.out.print("Enter the height of the wall: "); height = input.nextInt(); distance = Math.sqrt(Math.pow(length, 2) - Math.pow(height, 2)); angle = (180/pi) * (Math.sin(height/length)); System.out.println("The distance is " + distance); System.out.println("The angle is " + angle); } },java,math,Java,Math,如果要计算两点之间的距离,则距离应为: distance=Math.sqrt(Math.pow(长度,2)+Math.pow(高度,2)) 实际上,您可能正在计算一个负数的Math.sqrt(x),这将解释NaN(不是数字)结果 从以下文件的JavaDoc: 如果参数为NaN或小于零,则结果为NaN 编辑: 由于@AnthonyGrist的评论,我再次阅读了这个问题。 而距离计算的方程式为距离(p1,p2)=sqrt((x1-x2)^2+(y1-y2)^2),根据用户要求的输入-输入梯子的长度:

如果要计算两点之间的距离,则距离应为:

distance=Math.sqrt(Math.pow(长度,2)+Math.pow(高度,2))

实际上,您可能正在计算一个负数的
Math.sqrt(x)
,这将解释NaN(不是数字)结果

从以下文件的JavaDoc:

如果参数为NaN或小于零,则结果为NaN

编辑:

由于@AnthonyGrist的评论,我再次阅读了这个问题。 而距离计算的方程式为距离(p1,p2)=sqrt((x1-x2)^2+(y1-y2)^2)
,根据用户要求的输入-
输入梯子的长度:
输入墙的高度:
-似乎有理由相信我们要计算的距离是梯子底部与墙底部的水平距离

如果是这种情况,p1和p2是阶梯边缘的位置(为了简单起见,假设阶梯是一维的),并且上述等式中的距离(p1,p2)已经已知-它是
长度
。假设梯子到达墙的顶部,我们还知道
高度=abs(y1-y2)

因此,我们想要计算的实际上是
abs(x1-x2)

如果我们重新排列上述方程,我们得到:

distance=abs(x1-x2)=sqrt(dist(p1,p2)^2-(y1-y2)^2)=sqrt(长度^2-高度^2)

这正是问题中的原始方程

然而,只有当
高度时,该方程才是正确的
不代表数字。如果分数运算有一些输入
这会导致操作产生一些奇怪或未定义的结果
负数的平方根示例未定义,这基本上是在
Math.sqrt()
forlength2-height2<0的代码中执行的。它也可能是由
0.0/0.0
引起的,但这里的情况并非如此


你用什么输入法?我试过整数。不相关,但是
Math.PI
。哈哈,谢谢你给我的提示,我还在学习。快来打字吧。这就是代码的问题所在。当长度<高度时,它失败。将此更改为+后,OP就可以运行了。是的,谢谢,现在它运行良好,但在实验室工作表中,公式是这样给出的。那可能是个错误。@DamzZz这看起来不像是个错误。我假设场景是,您有一个长度为
l
的梯子靠在高度为
h
的墙壁上,您想计算梯子靠在地面上的墙壁底部的距离,以及梯子顶部和墙壁之间的角度?这个公式是正确的,它只是对毕达哥拉斯理论的重新整理,当
h
大于
l
时它就不起作用了。如果我上面的假设是正确的,将
-
改成
+
并不能解决问题;它给了你完全错误的结果。实际上,墙的高度是不相关的,你真正想要的是梯子靠在墙上的高度,它总是小于梯子的长度。@AnthonyGrist I假设距离函数表示两点之间的距离(即长度=x1-x2,高度=y1-y2)。也许我想错了,从这个问题上很难判断。不管怎么说,我回答了为什么这次行动让NaN得逞。