高人们来帮帮我啊,我都要被异常处理搞死了~~~~~~~~~~~~~~

magic256 2007-07-19 09:16:35
编写一个简单的四则运算器,
public class inputException extends Exception
{
public inputException()
{
super();
}
public inputException(String s)
{
super(s);
}
}
存为文件inputException.java然后编译






public class works
{
public double work(double x,String a,double y) throws inputException
{
if(a=="+")
{
return x+y;
}
else
{
if(a=="-")
{
return x-y;
}
else
{
if(a=="*")
{
return x*y;
}
else
{
if(a=="/")
{
return x/y;
}
else
{
throw new inputException("inputing error!!!!!!!");
}
}
}
}
}
}
存为works.java然后编译
最后将
public class calculator
{
public static void main(String args[])
{
if(args.length==3)
{
works working=new works();
double a=0,b,c;
try
{
a=Double.parseDouble(args[0]);
b=Double.parseDouble(args[2]);
c=working.work(a,args[1],b);
System.out.println(a+args[1]+b+"="+c);
}
catch(NumberFormatException e)
{
System.out.println("Inputing error!!!");
}

}
else{throw new inputException(Inputing error!!!!");}

}
}
存为calculator.java然后编译中出现

calculator.java:14: unreported exception inputException;must be caught or declared to be thrown
c=working.work(a."+",b);
1 error
为什么呀!!!!!急死我了,谁能给我个满意的答案我分全给他啊,拜托了,拜托各位高人了!!!


我再补充下啊,这三个.java是存在一个文件夹里的,并且classpath也指向了这个文件夹,所以应该不会找不到inputException.class,而且我编译calculator.java前,前两个已经都编译好了,所以我就纳闷了,,,谁来帮帮我5555555
...全文
139 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
DirectRay 2007-07-19
  • 打赏
  • 举报
回复
共同进步,共同学习。
magic256 2007-07-19
  • 打赏
  • 举报
回复
好了结贴了
谢谢两位!!!
DirectRay 2007-07-19
  • 打赏
  • 举报
回复
就是说,如果要使用我的类,那么就必须处理这个异常,如果你不处理,那么我不给你用。

主要作用是,有的包很容易导致一些异常的出现,比如说File类,很容易出现文件不存在,目录不存在这样的异常。那么,既然如此,不能因为使用这个类而导致程序崩溃,所以在编写类的时候,加上了throws关键字,来表示,使用这个类,必须要处理这个异常。也就是说,你在具体对这个类的实例进行操作的时候,必须要放在try catch中。

PS:所以我很纳闷,您难道要定义一个名字叫main的类?而且还是个静态的,无返回值的。
magic256 2007-07-19
  • 打赏
  • 举报
回复
请问下public static void main()后面那个throws inputException起到一个什么作用呢
DirectRay 2007-07-19
  • 打赏
  • 举报
回复
呵呵,刚才发的时候手慢了点,发现你刷过帖子了。但是又刷出来几个问题,呵呵。
首先是你写的一句。

System.out.println (a+args[1]+b+"="+c);

你想表达什么?虽然这样写是没错,会调用每个包装类的toSring()方法。但是这样写是很不好的一个习惯。如果需要,应该将非字符串用括号括起来。

其次,你要打印错误堆栈。应该使用异常类的一个方法,叫做"printStackTrace()"。具体到你的程序里面,也就是应该写成e.printStackTrace();

另外,请针对不同的异常,给出不同的名字,不要偷懒,都写上个e。
magic256 2007-07-19
  • 打赏
  • 举报
回复
谢谢了^_^
magic256 2007-07-19
  • 打赏
  • 举报
回复
为什么我的不行呢?能告诉我原因么
DirectRay 2007-07-19
  • 打赏
  • 举报
回复
1 你中间那个文件能编译通过?有这么写if else的?还挂上N多个else?

2 还是中间的文件。针对你需要的功能,不能使用 == 来判断俩String类型的东西。因为你的目的是判断,是否输入的是+ - / *。然而,== 表示的是判断二者是否指向同一个对象。应该使用String类的static方法equals()。

3 "must be caught or declared to be thrown"就是说这句可能会出错,比如,所以要把对这个错误的处理给出来。可以在方法上throws出来,也可以用try{}catch(){}来捕获。你只是简单的抛出了异常,而没有对异常进行处理。throw出一个东西来,系统接收到,确认是个异常,但是并没有相应的try catch来处理。

4 我感觉,你的应该是JAVA中间异常这一部分的书后习题。是不是要求实现自定义异常?如果是,你应该在中间文件的类定义部分后面加上"throws InputException"。然后在测试类里面,使用try catch来捕获所有可能触发的异常。最好在最后捕获一下Exception类。

5 说两句题外话。建议大家能不使用异常就不要使用异常,因为这东西是在JVM上运行的,系统开销非常的大。比如判断By Zero异常,也就是除0异常,可以简单的使用if来判断,同样实现了功能,但是系统开销很小。
joejoe1991 2007-07-19
  • 打赏
  • 举报
回复
不好意思 上面的代码写错了

应该是

public class test
{
public static void main(String args[]) throws inputException
{
if(args.length==3)
{
works working=new works();
double a=0,b,c;
try
{
a=Double.parseDouble(args[0]);
b=Double.parseDouble(args[2]);
c=working.work(a,args[1],b);
System.out.println(a+args[1]+b+"="+c);
}
catch(NumberFormatException e)
{
System.out.println("Inputing error!!!");
}catch(inputException e)
{
System.out.println(e);
}

}else{
throw new inputException("Inputing error!!!!");
}

}
}
joejoe1991 2007-07-19
  • 打赏
  • 举报
回复
把calculator类的代码改成

public class calculator
{
public static void main(String args[])
{
if(args.length==3)
{
works working=new works();
double a=0,b,c;
try
{
a=Double.parseDouble(args[0]);
b=Double.parseDouble(args[2]);
c=working.work(a,args[1],b);
System.out.println(a+args[1]+b+"="+c);
}
catch(NumberFormatException e)
{
System.out.println("Inputing error!!!");
}catch(inputException e)
{
System.out.println(e);
}

}else{throw new inputException(Inputing error!!!!");}


}
}

62,623

社区成员

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

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