The following code adds private Instance Variable and Public Methods to Account class.
private double balance;
It uses the private to hide its member field from outside. The only way to access balance value is via public method.
It guards the internal state by checking the parameter value:
Make sure credit amount is not negative, NaN or infinity
if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) { System.out.println("Invalid credit amount: " + amount); return -1; }
Make sure the debit amount is not negative, NaN or infinity */
if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) { System.out.println("Invalid debit amount: " + amount); return -1; }
Make sure a minimum balance of zero is maintained
if (this.balance < amount) { System.out.println("Insufficient fund. Debit attempted: " + amount); return -1; }
class Account { private double balance; public double getBalance() { // Return the balance of this account return this.balance; }/*from ww w . java2 s.co m*/ public int credit(double amount) { // Make sure credit amount is not negative, NaN or infinity if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) { System.out.println("Invalid credit amount: " + amount); return -1; } // Credit the amount System.out.println("Crediting amount: " + amount); this.balance = this.balance + amount; return 1; } public int debit(double amount) { // Make sure the debit amount is not negative, NaN or infinity */ if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) { System.out.println("Invalid debit amount: " + amount); return -1; } // Make sure a minimum balance of zero is maintained if (this.balance < amount) { System.out.println("Insufficient fund. Debit attempted: " + amount); return -1; } // Debit the amount System.out.println("Debiting amount: " + amount); this.balance = this.balance - amount; return 1; } } public class Main { public static void main(String[] args) { Account ac = new Account(); double balance = ac.getBalance(); System.out.println("Balance = " + balance); // Credit and debit some amount ac.credit(1.1); ac.debit(1.12); balance = ac.getBalance(); System.out.println("Balance = " + balance); // Attempt to credit and debit invalid amounts ac.credit(-2.90); ac.debit(Double.POSITIVE_INFINITY); balance = ac.getBalance(); System.out.println("Balance = " + balance); // Attempt to debit more than the balance ac.debit(3.00); balance = ac.getBalance(); System.out.println("Balance = " + balance); } }