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.
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