package myArray;

import java.lang.Double;
import java.lang.Math;


public class BankAccount {
	private double balance;

	public BankAccount(double firstDeposit) { balance=firstDeposit; }
	public double getBalance() { return balance; }
	public void deposit(double amount) { balance +=amount; }
	public void withdraw(double amount) { balance -=amount; }
	public String toString() { return "BankAccount[balance="+balance+"]"; }

	static BankAccount minBalance(BankAccount[] accounts) {
		if (accounts==null) return null;
		BankAccount min=null;
		for(BankAccount acct : accounts) {
			if (acct==null) continue;
			if (min==null) {
				min=acct;
				continue;
			}
			if (acct.balance < min.balance) min=acct;
		}
		return min;
	}

	static double minBalanceValue(BankAccount[] accounts) {
		double min=Double.POSITIVE_INFINITY;
		if (accounts==null) return min;
		for(BankAccount acct : accounts) {
			if (acct==null) continue;
			if (acct.balance < min) min=acct.balance;
		}
		return min;
	}

	static BankAccount maxBalance(BankAccount[] accounts) {
		if (accounts==null) return null;
		BankAccount max=null;
		for(BankAccount acct : accounts) {
			if (acct==null) continue;
			if (max==null) {
				max=acct;
				continue;
			}
			if (acct.balance > max.balance) max=acct;
		}
		return max;
	}

	static double avgBalanceValue(BankAccount[] accounts) {
		double avg=0;
		int count=0;
		if (accounts==null) return Double.NaN;
		for(BankAccount acct : accounts) {
			if (acct==null) continue;
			avg +=acct.balance;
			count++;
		}
		if (count==0) return Double.NaN;
		// System.out.println("sum="+avg+" count="+count+" raw avg=" + (avg/count));
		return Math.round(100.00*avg/(double)count)/100.0; // Round to the nearest cent
	}


}