A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑强强 中级黑马   /  2012-4-10 22:15  /  1390 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class a15
{
public static void main(String[] args)
{
int arr[]={4,12,87,21,6,18};
int den[]={2,0,7,0,61,0};
double sum=0.0;
for(int i=0;i<=6;i++)
{
/*if((den[i]==0)||(i>den.length-1))
{
System.out.println("程序执行有误");
break;
}
else
{
sum+=(double)arr[i]/den[i];
System.out.println("sum="+sum);
}*/
try
{
sum+=(double)arr[i]/den[i];
System.out.println("sum="+sum);
}
catch(ArithmeticException e)
{
System.out.println("除数为0");
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("超出数组大小");
}

}
System.out.println("Hello World!");
}
}

在网上偶然看到的程序,为什么除数为0时,没有抛出异常,自己没有想明白??各位大虾看看吧

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
ArithmeticException 和ArithmeticException  都是RuntimeException 的子类,可以不抛出异常。如果出现不错,程序将停止,让你修改。
异常有两种:
        编译时被检测异常
                该异常在编译时,如果没有处理(没有抛也没有try),编译失败。
                该异常被标识,代表这可以被处理。
        运行时异常(编译时不检测)(RuntimeException 及其子类)
                在编译时,不需要处理,编译器不检查。
                该异常的发生,建议不处理,让程序停止。需要对代码进行修正。

评分

参与人数 1黑马币 +5 收起 理由
贠(yun)靖 + 5 不要答非所问哦~~~!

查看全部评分

回复 使用道具 举报
class a15
{
public static void main(String[] args)
{
int arr[]={4,12,87,21,6,18};
int den[]={2,0,7,0,61,0};
double sum=0.0;
for(int i=0;i<=6;i++)
{
/*if((den==0)||(i>den.length-1))
{
System.out.println("程序执行有误");
break;
}
else
{
sum+=(int)arr/den;
System.out.println("sum="+sum);
}*/
try
{
sum+=(int)arr/den;
System.out.println("sum="+sum);
}
catch(ArithmeticException e)
{
System.out.println("除数为0");
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("超出数组大小");
}

}
System.out.println("Hello World!");
}
}

你用的是double型,算出的是无穷大,是不会抛异常的,你把 double改成int 就会马上抛异常了。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
楼上真是一针见血!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马