这段程序中的三个if一个都没有执行,最后的输出却是Double.Nan,为什么?

shi_hang_nk 2002-02-21 08:47:11
这段程序中的三个if一个都没有执行,最后的输出却是Double.Nan,为什么?
public class Identifier{
public static void main(String [] args)
{
double i = 0.0d/0.00;

if ( i == Double.NEGATIVE_INFINITY ){
System.out.println(" i is -inifinity "+i);
}
else if( i == Double.POSITIVE_INFINITY ){
System.out.println(" i is +inifinity "+i);
}
else if( i == Double.NaN){
System.out.println(" i is nan "+i);
}
System.out.println(" i is : "+i);

}
}
...全文
64 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimjxr 2002-02-21
  • 打赏
  • 举报
回复
NaN不是一个数,所以用<,<=,>,>=,==比较时,只要有一个是NaN,比较结果总是false,包括NaN==NaN。用!=比较时只要有一个是NaN,比较结果总是true,包括NaN!=NaN。
carry_tang 2002-02-21
  • 打赏
  • 举报
回复
这样比较肯定是不行的。
NEGATIVE_INFINITY、POSITIVE_INFINITY、NaN只是一个固定的标志值
而i是一个任意变化的值,并不是i为正数就一定等于Double.NEGATIVE_INFINITY ,其它情况也一样


lhdyf 2002-02-21
  • 打赏
  • 举报
回复
把第二个else中i==Double.Nan 改为 Double.isNaN(i) 就可以判断i是否是NaN

public class Identifier{
public static void main(String [] args)
{
double i = 0.0d/0.00;

if ( i == Double.NEGATIVE_INFINITY ){
System.out.println(" i is -inifinity "+i);
}
else if( i == Double.POSITIVE_INFINITY ){
System.out.println(" i is +inifinity "+i);
}
else if(Double.isNaN(i)){
System.out.println(" i is nan "+i);
}
System.out.println(" i is : "+i);

ahbill 2002-02-21
  • 打赏
  • 举报
回复
double i = 0.0d/0.00;

这句抛了例外,导致后面的语句都没有执行。
可以用try/catch块来捕获这个异常。

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧