日期:2014-05-19  浏览次数:20842 次

自定义异常_公交刷卡
2. 自定义异常
要求:乘坐公交车刷卡操作。定义公交卡类,若刷卡金额大于余额,则作为异常处理。
步骤:
(1)产生异常的条件是余额少于刷卡金额,是否抛出异常要先对该条件做判断,确定产生异常的方法,在刷卡方法中产生异常。
(2)处理异常安排在调用刷卡方法中,刷卡方法抛出异常,由上一级调用方法捕获并处理。
(3)定义异常。
package ex_7_5;
class buscard{
String name;
double balance;
buscard(String name,double balance){
this.name=name;
this.balance=balance;
}
}
class MyException extends Exception{
private String myString;
public MyException(String myString){
this.myString=myString;
}
public String getMyString(){
return myString;
}
@Override
public String toString(){
return myString;
}
}
public class ex_7_5 {
public static double slotcard(double x,buscard A)throws MyException{
if(A.balance-x<0)
throw new MyException("余额不足!刷卡失败!");
else
return A.balance-x;
}
public static void main(String[] args){
buscard A=new buscard("Chen",0.5);//测试用到:0.5,1
double x;
x=1;
try{
A.balance=slotcard(x,A);
System.out.println("刷卡成功!余额为:"+A.balance);
}catch(MyException e){
System.out.println("!");
}
}
}
程序存在一些问题,望高手帮帮忙。
附:为什么这样输出的异常是“!”却不是("余额不足!刷卡失败!")

------解决方案--------------------
Java code

把System.out.println("!");改为:
e.printStackTrace();

------解决方案--------------------
或者改成
System.out.println(e.getMyString());
------解决方案--------------------
Java code

    public static void main(String[] args) {
        buscard A = new buscard("Chen", 0.5);// 测试用到:0.5,1
        double x = 1;
        try {
            A.balance = slotcard(x, A);
            System.out.println("刷卡成功!余额为:" + A.balance);
        } catch (MyException e) {
            System.out.println("!");
        }
    }

------解决方案--------------------
探讨
Java code

把System.out.println("!");改为:
e.printStackTrace();



这样就可以了