
一段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语句捕获? 展开
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语句捕获? 展开
5个回答
展开全部
public class ArithmeticException
extends RuntimeException
当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
---以上来自api
经测试 double不抛出异常
int改为int抛出此类异常
extends RuntimeException
当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
---以上来自api
经测试 double不抛出异常
int改为int抛出此类异常
展开全部
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
转换成double 为0.0
而double中的0不是真正的0或0.0 而是一个很长的,可能是0.000000000001或其它,所以一个正数除以0.0结果就得很大很大。负数除以0.0, 0.0/0.0 一样道理。
//浮点数是使用二进制数据的科学计数法表示,所以不可能精确表示一个浮点数
所以得出的结果是无穷大Infinity
追问
这个我当然知道,我问的是执行2/0,出现的ArithmeticException异常,为什么没有被后面的catch语句捕获?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
无穷大,也就是说正常计算,得到的结果是无穷大
捕捉错误,要看你的系统是否会抛出错误。你可以用整数0除一下,看是不是抛异常
捕捉错误,要看你的系统是否会抛出错误。你可以用整数0除一下,看是不是抛异常
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
获取键盘输入:
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=.....你明白的!
}
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=.....你明白的!
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不要用double接收 用int类型接收计算就可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询