I have this class Account
import java.io.IllegalArgumentException; class Account { final int accountNo; final Customer owner; final double overdraft; double balance = 0; private Account(int accountNo, Customer owner, double overdraft) { this.accountNo = accountNo; this.owner = owner; this.overdraft = overdraft; } void print() { Out.println("Kontonummer: " + accountNo); owner.print(); Out.format("Kontostand: %.2f%nÜberziehungsrahmen: %.2f%n", balance, overdraft); } public boolean deposit(double amount) throws IllegalArgumentException { if (amount <= 0) { throws new IllegalArgumentException("Cannot deposit negative amounts!"); break; } else { balance += amount; return true; } public boolean withdraw(double amount) throws OverdraftLimitReachedException { if (amount <= 0 || !isCovered(amount)) { throw new OverdraftLimitReachedException("Overdraft limit has been reached", accountNo); break; } else { balance -= amount; return true; } boolean isCovered(double amount) { return amount - overdraft <= balance; } boolean transfer(Account target, double amount) { boolean success = withdraw(amount); if (!success) return false; target.deposit(amount); return true; } } } }
Now I also have this exception that I wrote
public class NoSuchAccountException extends AccountException { public NoSuchAccountException(int accountNo) { super(message, accountNo); } }
Now I need to throw this exception in the class account,when the searched account number does not exist.Now my question is in which method(or function I think that is the same,please correct me if I’m wrong) do I throw this exception.And after what check.How would I check if the account number exist,and if it doesnt I’ll throw this exception. Thank you!
EDIT: The class banking, to complete the program
class Banking { static final int CAPACITY = 100; final Account[] accounts = new Account[CAPACITY]; int nOfAccounts = 0; int createAccount(String firstName, String lastName, String phone, double overdraft) { if (nOfAccounts == CAPACITY) return -1; // use nOfAccounts as accountNo and index to array Customer owner = new Customer(firstName, lastName, phone); Account account = new Account(nOfAccounts, owner, overdraft); accounts[nOfAccounts] = account; nOfAccounts++; return account.accountNo; } boolean deposit(int accountNo, double amount) { if (accountNo < 0 || accountNo >= nOfAccounts) return false; Account account = accounts[accountNo]; return account.deposit(amount); } boolean withdraw(int accountNo, double amount) { if (accountNo < 0 || accountNo >= nOfAccounts) return false; Account account = accounts[accountNo]; return account.withdraw(amount); } boolean transfer(int fromNo, int toNo, double amount) { if (fromNo < 0 || toNo < 0 || fromNo >= nOfAccounts || toNo >= nOfAccounts) return false; Account from = accounts[fromNo]; Account to = accounts[toNo]; return from.transfer(to, amount); } double getBalance(int accountNo) { if (accountNo < 0 || accountNo >= nOfAccounts) return 0; Account account = accounts[accountNo]; return account.balance; } double getBalance() { double sum = 0; for (int i = 0; i < nOfAccounts; i++) { sum += accounts[i].balance; } return sum; } void print() { Out.println("---------- Bankauszug ----------"); for (int i = 0; i < nOfAccounts; i++) { accounts[i].print(); Out.println("--------------------------------"); } Out.format("Bilanzsumme: %.2f%n", getBalance()); Out.println("--------------------------------"); } // --------------------- Optionaler Teil --------------------- public static void main(String[] args) { Banking banking = new Banking(); char op; do { printMenu(); op = readOperation(); switch (op) { case 'a': { printTitle("Konto anlegen"); String firstName = getString("Vorname"); String lastName = getString("Nachname"); String phone = getString("Telefonnummer"); double overdraft = getDouble("Überziehungsrahmen"); int accountNo = banking.createAccount( firstName, lastName, phone, overdraft); printMessage("Anlegen von Konto " + accountNo, accountNo != -1); break; } case 'e': { printTitle("Einzahlen"); int accountNo = getInt("Kontonummer"); double amount = getDouble("Einzahlungsbetrag"); boolean success = banking.deposit(accountNo, amount); printMessage("Einzahlen", success); break; } case 'b': { printTitle("Abheben"); int accountNo = getInt("Kontonummer"); double amount = getDouble("Abhebungsbetrag"); boolean success = banking.withdraw(accountNo, amount); printMessage("Abheben", success); break; } case 't': { printTitle("Überweisen"); int fromNo = getInt("Von Kontonummer"); int toNo = getInt("Auf Kontonummer"); double amount = getDouble("Betrag"); boolean success = banking.transfer(fromNo, toNo, amount); printMessage("Überweisen", success); break; } case 'd': banking.print(); break; case 'q': Out.println("Beenden"); break; default: Out.println("Ungültige Operation"); break; } } while(op != 'q'); } static void printMenu() { Out.println(); Out.println("*********** Bankverwaltung ********"); Out.println("Konto anlegen ................... a"); Out.println("Einzahlen ....................... e"); Out.println("Beheben ......................... b"); Out.println("Überweisen ...................... t"); Out.println("Übersicht drucken ............... d"); Out.println("Beenden ......................... q"); Out.print("Welche Menuoption? [a|e|b|t|d|q]: "); } static char readOperation() { char ch = Character.toLowerCase(In.readChar()); In.readLine(); return ch; } static void printTitle(String text) { Out.println("*** " + text + " ***"); } static String getString(String text) { Out.print(text + ": "); return In.readLine(); } static double getDouble(String text) { Out.print(text + ": "); return In.readDouble(); } static int getInt(String text) { Out.print(text + ": "); return In.readInt(); } static void printMessage(String operation, boolean success) { String message = success ? operation + " erfolgreich durchgeführt" : "Ungültige Operation"; Out.println(message); } }
Advertisement
Answer
Extract the common place for acquiring the account
private Acount getAccount(accountNo) { if (accountNo >= accounts.length || accounts[accountNo] == null) { throw new NoSuchAccountException(); } return account; } boolean deposit(int accountNo, double amount) { Account account = getAccount(accountNo); return account.deposit(amount); }