SHARE
SPREAD
HELP

The Tradition of Sharing

Help your friends and juniors by posting answers to the questions that you know. Also post questions that are not available.


To start with, Sr2Jr’s first step is to reduce the expenses related to education. To achieve this goal Sr2Jr organized the textbook’s question and answers. Sr2Jr is community based and need your support to fill the question and answers. The question and answers posted will be available free of cost to all.

 

#
Authors:
Walter Savitch ,kenrick Mock
Chapter:
Exception Handling
Exercise:
Programming Projects
Question:7 | ISBN:9780132830317 | Edition: 5

Question

A method that returns a special error code is usually better accomplished throwing an exception instead. The following class maintains an account balance.

class Account

{

private double balance;

public Account()

{

balance = 0;

}

public Account( double initialDeposit)

{

balance = initialDeposit;

}

public double getBalance()

{

return balance;

}

// returns new balance or -1 if error

public double deposit( double amount)

{

if (amount > 0)

balance += amount;

else

return -1;// Code indicating error

return balance;

}

// returns new balance or -1 if invalid amount

public double withdraw(double amount)

{

if ((amount > balance) || (amount < 0))

return -1;

else

balance -= amount;

return balance;

}

}

Rewrite the class so that it throws appropriate exceptions instead of returning −1 as an error code. Write test code that attempts to withdraw and deposit invalid amounts and catches the exceptions that are thrown.


TextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbook

Answer

PROGRAM CODE:

class InsufficientFundsException extends Exception {
    public InsufficientFundsException(String message) {
        super(message);
    }
}

class InvalidAmountException extends Exception {
    public InvalidAmountException(String message) {
        super(message);
    }
}

class Account {
    private double balance;

    public Account() {
        balance = 0;
    }

    public Account(double initialDeposit) {
        balance = initialDeposit;
    }

    public double getBalance() {
        return balance;
    }

    public double deposit(double amount) throws InvalidAmountException {
        if (amount <= 0) {
            throw new InvalidAmountException("Invalid deposit amount: " + amount);
        }
        balance += amount;
        return balance;
    }

    public double withdraw(double amount) throws InsufficientFundsException, InvalidAmountException {
        if (amount <= 0) {
            throw new InvalidAmountException("Invalid withdrawal amount: " + amount);
        }
        if (amount > balance) {
            throw new InsufficientFundsException("Insufficient funds for withdrawal: " + amount);
        }
        balance -= amount;
        return balance;
    }
}

public class AccountTest {
    public static void main(String[] args) {
        Account account = new Account(1000);

        try {
            // Attempt to deposit invalid amounts
            account.deposit(-100);
        } catch (InvalidAmountException e) {
            System.out.println("Invalid deposit amount: " + e.getMessage());
        }

        try {
            // Attempt to withdraw invalid amounts
            account.withdraw(-200);
        } catch (InvalidAmountException e) {
            System.out.println("Invalid withdrawal amount: " + e.getMessage());
        } catch (InsufficientFundsException e) {
            System.out.println("Insufficient funds for withdrawal: " + e.getMessage());
        }

        try {
            // Attempt to withdraw more than the balance
            account.withdraw(1500);
        } catch (InvalidAmountException e) {
            System.out.println("Invalid withdrawal amount: " + e.getMessage());
        } catch (InsufficientFundsException e) {
            System.out.println("Insufficient funds for withdrawal: " + e.getMessage());
        }
    }
}

OUTPUT OF THE PROGRAM CODE:

Invalid deposit amount: -100.0
Invalid withdrawal amount: -200.0
Insufficient funds for withdrawal: 1500.0

 

0 0

Discussions

Post the discussion to improve the above solution.