Java Point2D返回NaN/Nullpointer

Java Point2D返回NaN/Nullpointer,java,nullpointerexception,nan,Java,Nullpointerexception,Nan,我最近遇到了一个困扰我的问题。我正在将Point2D对象的位置设置为另一个预先存在的Point2D对象。当我将预先存在的点分配给新点时,我得到一个空指针异常。为了更好地解释这一点,这里是我的代码和输出。输出清楚地表明,第一个点已初始化,其值早于明显的空指针。有人知道为什么会这样吗 代码: 在代码或输出的任何地方都没有提到NaN 您得到了一个NullPointerException,因为position是null(您从未初始化过它)。您似乎没有在构造函数中初始化字段position,然后尝试打印它

我最近遇到了一个困扰我的问题。我正在将Point2D对象的位置设置为另一个预先存在的Point2D对象。当我将预先存在的点分配给新点时,我得到一个空指针异常。为了更好地解释这一点,这里是我的代码和输出。输出清楚地表明,第一个点已初始化,其值早于明显的空指针。有人知道为什么会这样吗

代码:


在代码或输出的任何地方都没有提到
NaN


您得到了一个
NullPointerException
,因为
position
null
(您从未初始化过它)。

您似乎没有在构造函数中初始化字段
position
,然后尝试打印它。因此抛出异常

编辑:

什么是
航路点
?取决于它是什么
面板。waypoints.get(0)
可能会导致从waypoints中删除该点,从而在您第二次尝试访问该点时产生NPE

System.out.println(Panel.waypoints.get(0).getPoint()); // Point2D.Double[331.0, 284.0]
position.setLocation(Panel.waypoints.get(0).getPoint());
从这两行可以安全地假定该位置未初始化。您无法访问(例如尝试
设置位置(Point2D)
,或对未初始化的对象不执行任何操作(因此,
位置
)。请使用以下命令初始化它:

Point2D postition = new Point2D.Double(0, 0);
然后,您应该能够将其设置到您需要的任何位置


关于NaN:使用
NaN
值表示某些无效操作的结果,例如将
zero
除以
zero。
NaN
浮点和双精度类型的常量都预定义为
float.NaN
double.NaN
使用它们进行任何无效操作。

面板.waypoints.get(0).getPoint()
请使用SSCCE显示
面板的相关代码,该代码是第36行(引发异常的位置)?发布异常时,请确定异常指向哪一行(在本例中,
敌方.java:36
)。我想这是带有
if
语句的一行。@NickHaughton示例。一个
null
Point2D
没有值,“打印”它们没有任何意义。它有完美的意义……运行此代码:position=Panel.waypoints.get(0).getPoint();System.out.println(position);在控制台中生成:Point2D.Double[NaN,NaN]@NickHaughton NaN是一个特定的值,只有浮点(
Double
float
)可以接受,而不是其他任何值(即a
Point2D
)请仔细阅读,了解更多信息details@vandale点2D获取并返回双倍或浮点数。请阅读@NickHaughton上的内容,它不是
null
Point2D
。它是
Point2D
,其值为
NaN
。int x,y;Point2D点;公共航路点(int x,int y){this.x=x;this.y=y;point=new Point2D.Double(x,y);}
waypoint
的类型是
waypoint
哪个是您自己的类?如果是这样,请在其竞赛中编辑成原始问题。即使在
Point2D位置=new Point2D.Double(0,0)之后,我也会得到相同的错误
请提交一个简短的工作代码,该代码能够产生您所遇到的错误,我们可以通过复制粘贴在控制台中运行,以便更快地获得更好的帮助
    int x, y;
Point2D point;

public Waypoint(int x, int y) {
    this.x = x;
    this.y = y;
    point = new Point2D.Double(x, y);
}
Point2D getPoint() {
    return point;
}
System.out.println(Panel.waypoints.get(0).getPoint()); // Point2D.Double[331.0, 284.0]
position.setLocation(Panel.waypoints.get(0).getPoint());
Point2D postition = new Point2D.Double(0, 0);