黑马程序员技术交流社区

标题: 请问,为什么这段代码不报错呢? [打印本页]

作者: 吕猛    时间: 2011-12-25 22:51
标题: 请问,为什么这段代码不报错呢?
不知道为什么,把double改成int之后,就会和毕老师课中的实例那样报错。如果改成double的话,就能通过编译,并能运算,运算结果为:Infiniy。
  1. class Shang
  2. {
  3.         public static double chu(double a,double b)
  4.         {
  5.                 double num = a/b;
  6.                 return num;
  7.         }
  8. }
  9. class  DemoException
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 Shang s = new Shang();
  14.                 double x;
  15.                 try
  16.                 {
  17.                         x = s.chu(5,0);       
  18.                         System.out.println(x);
  19.                 }
  20.                 catch (Exception e)
  21.                 {
  22.                         System.out.println(e.getMessage());
  23.                         System.out.println(e.toString());
  24.                 }
  25.                 System.out.println("over!");
  26.         }
  27. }
复制代码



作者: 李楠    时间: 2011-12-25 23:41
你的意思是哪里的double改成int?报什么错?
作者: yunqiangshan    时间: 2011-12-25 23:50
将变量x定义为int,但chu()方法的返回值类型为double肯定会报错,损失精度了,除非你强转,   x = (int)s.chu(5,0);  ,这样也不会报错。
至于改为double后运行结果为Infiniy,无限,主要是因为双精度的时候0其实不是真正的零,是一个非常小近似o的数,跟int型的0不同,int型的是真正的零,而不是一个很小的近似为零的数。
作者: 吕猛    时间: 2011-12-26 15:39
李楠 发表于 2011-12-25 23:41
你的意思是哪里的double改成int?报什么错?

不是,上面的代码直接运行,结果为Infiniy。而不是报错。
作者: 吕猛    时间: 2011-12-26 15:40
yunqiangshan 发表于 2011-12-25 23:50
将变量x定义为int,但chu()方法的返回值类型为double肯定会报错,损失精度了,除非你强转,   x = (int) ...

报错是因为除数不能为0.
作者: yunqiangshan    时间: 2011-12-26 17:37
京泰 发表于 2011-12-26 15:40
报错是因为除数不能为0.

我以为你说编译时出错呢,chu(double a,double b)中double改为int运行时
当然会报错了,除零肯定没有结果,当然要报错了,改为double的话,除的其实不是零,是一个近似于零的值,所以不报错,并且有结果。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2