一段java小程序,大神看看问题出在哪?

publicclassJisuanqi{publicstaticvoidmain(Stringargs[]){if(args.length<3){System.out.p... public class Jisuanqi {
public static void main(String args[]) {
if(args.length<3) {
System.out.println("Usage: java jisuanqi n1 op n2");
System.exit(-1);
}
else {
try{
double d1 = Double.parseDouble(args[0]);
double d2 = Double.parseDouble(args[2]);
double d = 0;
if(args[1].equals("+")) d = d1 + d2;
else if(args[1].equals("-")) d = d1 - d2 ;
else if(args[1].equals("x")) d = d1 * d2 ;
else if(args[1].equals("/")) d = d1/d2 ;
else {
System.out.println("Error!");
System.exit(-1);
}
System.out.println("result is "+d);
}
catch(NumberFormatException e) {
System.out.println("yichang");
e.getMessage();
}
catch(ArithmeticException e1) {
System.out.println("yichang");
e1.getMessage();
}
}
}
}
在cmd编译后输入 java Jisuanqi 2 / 0 时,理应出现异常,并且被捕获打印“yichang”,但是实际却是显示 result is Infinity
请问这是怎么一回事,怎么样才能捕获ArithmeticException这个异常?
谢谢
出现的ArithmeticException异常,为什么没有被后面的catch语句捕获?
展开
 我来答
hanliwoyaoai
2013-06-08 · TA获得超过416个赞
知道小有建树答主
回答量:593
采纳率:0%
帮助的人:473万
展开全部
public class ArithmeticException

extends RuntimeException

当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。

---以上来自api

经测试 double不抛出异常
int改为int抛出此类异常
zhaotao_king
2013-06-08 · TA获得超过2455个赞
知道大有可为答主
回答量:863
采纳率:0%
帮助的人:1174万
展开全部
double d2 = Double.parseDouble(args[2]);

转换成double 为0.0

而double中的0不是真正的0或0.0 而是一个很长的,可能是0.000000000001或其它,所以一个正数除以0.0结果就得很大很大。负数除以0.0, 0.0/0.0 一样道理。

//浮点数是使用二进制数据的科学计数法表示,所以不可能精确表示一个浮点数

所以得出的结果是无穷大Infinity
追问
这个我当然知道,我问的是执行2/0,出现的ArithmeticException异常,为什么没有被后面的catch语句捕获?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hannyhe
2013-06-08 · TA获得超过984个赞
知道小有建树答主
回答量:1607
采纳率:0%
帮助的人:680万
展开全部
无穷大,也就是说正常计算,得到的结果是无穷大

捕捉错误,要看你的系统是否会抛出错误。你可以用整数0除一下,看是不是抛异常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
勤奋的萨芬大幅
2013-06-08
知道答主
回答量:33
采纳率:0%
帮助的人:11.9万
展开全部
获取键盘输入:
Scanner input=new Scanner(System.in);
Double num1=input.nextDouble();
Double num2=input.nextDouble();
String fuhao=input.next();
Double sum=0;
if(fuhao.equest("+"))
{
sum=num1+num2;
}else if(.....)
{
sum=.....你明白的!
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
litongyu1111
2013-06-08 · TA获得超过111个赞
知道答主
回答量:206
采纳率:0%
帮助的人:107万
展开全部
不要用double接收 用int类型接收计算就可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式