how2j.cn

步骤 1 : 练习-异常综合1   
步骤 2 : 答案-异常综合1   
步骤 3 : 练习-异常综合2   
步骤 4 : 答案-异常综合2   

步骤 1 :

练习-异常综合1

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
这是一个类图
Account类: 银行账号
属性: balance 余额
方法: getBalance() 获取余额
方法: deposit() 存钱
方法: withdraw() 取钱
OverdraftException: 透支异常,继承Exception
属性: deficit 透支额
练习-异常综合1
步骤 2 :

答案-异常综合1

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

5分18秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


package exception; public class Account { protected double balance; public Account(double balance) { this.balance = balance; } public double getBalance() { return balance; } public void deposit(double amt){ this.balance+=amt; } public void withdraw(double amt) throws OverDraftException{ if(this.balance<amt) throw new OverDraftException("余额不足", amt-this.balance); this.balance-=amt; } public static void main(String[] args) { //开户存了1000 Account a = new Account(1000); //存钱1000 a.deposit(1000); //查看余额 System.out.println(a.getBalance()); try { //取2001 a.withdraw(2001); } catch (OverDraftException e) { System.err.println("透支金额:"+e.getDeficit()); e.printStackTrace(); } } }
package exception; public class OverDraftException extends Exception{ private double deficit; public double getDeficit() { return deficit; } public OverDraftException(String msg, double deficit) { super(msg); this.deficit = deficit; } }
步骤 3 :

练习-异常综合2

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
类: CheckingAccount 支票账户,具备透支额度,继承Account
属性:overdraftProtection 透支额度
练习-异常综合2
步骤 4 :

答案-异常综合2

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

4分41秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


package exception; public class CheckingAccount extends Account { private double overdraftProtection; public CheckingAccount(double balance) { super(balance); } public CheckingAccount(double balance, double overdraftProtection) { super(balance); this.overdraftProtection = overdraftProtection; } public void withdraw(double amt) throws OverDraftException { if (amt > this.balance + overdraftProtection) { double deficit = amt - (this.balance + overdraftProtection); throw new OverDraftException("透支额度超标", deficit); } this.balance -= amt; } public static void main(String[] args) { //开户存了1000块,拥有500的透支额度 CheckingAccount a = new CheckingAccount(1000, 500); //存了1000 a.deposit(1000); //查询余额 System.out.println(a.getBalance()); try { a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); } catch (OverDraftException e) { System.err.println("透支超额:"+e.getDeficit()); e.printStackTrace(); } } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2022-05-12 答案
大D




1,2
public class CheckingAccount extends Account {
    private double overdraftProtection;

    public double getOverdraftProtection() {
        return overdraftProtection;
    }

    public void setOverdraftProtection(double overdraftProtection) {
        this.overdraftProtection = overdraftProtection;
    }

    @Override
    public void withdraw(double amt) throws OverdraftException {
        double balance =getBalance();
        balance-=amt;
        if(balance>0){
            System.out.println("取款成功,余额为"+balance);
        }else if(balance>=-overdraftProtection){
            overdraftProtection=overdraftProtection+balance;
            System.out.println("取款成功,透支额度余额为"+overdraftProtection);
        }else{
            throw new OverdraftException("余额不足,取款失败");
        }
        //super.withdraw(amt);
    }

    public static void main(String[] args) {
        CheckingAccount ca =new CheckingAccount();
        ca.deposit(100);
        ca.setOverdraftProtection(100);
        try {
            ca.withdraw(300);
        }catch (OverdraftException e){
            e.printStackTrace();
        }
    }
}
public class Account  {

    private double balance;

    public double getBalance(){
        System.out.println("余额为"+balance);
        return balance;
    }
    public void deposit(double money){
          balance+=money;
        System.out.println("存款成功,余额为"+balance);
    }
    public void withdraw(double amt) throws OverdraftException {
        balance-=amt;
        if(balance<0){
             throw new OverdraftException("余额不足!");

         }else{

             System.out.println("取款成功,余额为"+balance);
         }
    }

    public static void main(String[] args) {
       Account ac=new Account();
       ac.balance=100;
       ac.deposit(100);
       ac.getBalance();
       try {
           ac.withdraw(300);
       }catch(OverdraftException e){
           e.printStackTrace();
       }
    }
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2021-09-04 答: 练习1,练习2
老油头




答: 练习1,练习2
------------------------练习1:Account ---------------------------
public class Account {
    /**
     * 余额
     */
    private double balance;

    public double getBalance() {
        System.out.println("当前余额为:" + balance);
        return balance;
    }

    public void deposit(double money) {
        balance += money;
        System.out.println("存款成功,余额为:" + balance);
    }

    public void withdraw(double money) throws OverdraftException {
        if ((balance - money) >= 0) {
            balance -= money;
            System.out.println("取款成功,余额为: " + balance);
        } else {
            balance -= money;
            //透支金额
            double deficit = balance;
            throw new OverdraftException("余额不足,取款失败!\n超支金额:" + deficit);
        }
    }

    static class OverdraftException extends Exception {
        public OverdraftException(String msg) {
            super(msg);
        }
    }

    public static void main(String[] args) {
        Account account = new Account();
        account.deposit(651.50);
        account.getBalance();
        try {
            account.withdraw(661);
        } catch (OverdraftException e) {
            e.printStackTrace();
        }
    }
}

------------------------练习2 :overdraftProtection---------------------------

public class CheckingAccount extends Account {
    public void setOverdraftProtection(double overdraftProtection) {
        this.overdraftProtection = overdraftProtection;
    }

    public double getOverdraftProtection() {
        System.out.println("可用透支额度为: " + overdraftProtection);
        return overdraftProtection;
    }

    /**
     * 透支额度
     */
    private double overdraftProtection;



    @Override
    public void withdraw(double money) throws OverdraftException {
        double balance = getBalance();
        double overBalance = getOverdraftProtection();
        if ((balance - money) >= 0){
            balance -= money;
            System.out.println("取款成功,余额为: " + balance);
        } else if (((balance + overBalance) - money) >=0){
            balance -= money;
            overBalance += balance;
            System.out.println("取款成功,余额为: " + balance + "; " +
                    "\n剩余透支额度为:" + overBalance
                    );
        } else {
            balance += overBalance;
            balance -= money;
            //透支金额
            throw new OverdraftException("余额不足,取款失败!\n 超支金额:" + balance);
        }
    }

    public static void main(String[] args) {
        CheckingAccount checkingAccount = new CheckingAccount();
        checkingAccount.deposit(1988.50);
        checkingAccount.setOverdraftProtection(100);
        try {
            checkingAccount.withdraw(3000);
        } catch (OverdraftException e) {
            e.printStackTrace();
        }
    }
}

							


2 个答案

hoolich
答案时间:2022-03-30
/*类: CheckingAccount 支票账户,具备透支额度,继承Account 属性:overdraftProtection 透支额度*/ package exception; public class CheckingAccount extends Account{//支票账户 public int overdraftProtection;//透支额度 public CheckingAccount(int balance){ super(balance); } public CheckingAccount(int balance, int overdraftProtection) { super(balance); this.overdraftProtection = overdraftProtection; } public void withdraw(int amt) throws OverdraftException { if (amt > this.balance + overdraftProtection) { int deficit = amt - (this.balance + overdraftProtection); throw new OverdraftException("透支额度超标", deficit); } this.balance -= amt; } public static void main(String[] args) { CheckingAccount a=new CheckingAccount(2000,100); try{ a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); } catch (OverdraftException e){ // TODO Auto-generated catch block e.printStackTrace(); System.out.println("透支金额:"+e.getDeficit()); } } }

humiao21
答案时间:2021-12-10
学习了!但是发现一点错误,如果这么写,每次取钱的时候,如果钱不够,本来的钱也会变成负数,deficit 是用户余额的话,不能在取钱不够的时候更改



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2021-05-23 练习-异常综合
2021-04-14 关于msg和e.printStackTrace。
2021-04-09 两道题 答案


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 28 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-异常处理-综合练习 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图