Provate questo programma e aiutatemi a corregere l'errore.
Questo è quello che mi esce sulla console:

Count: 2
Expected: 2
Balance of matching account: 10000.0
Expected: 10000
Exception in thread "main" java.lang.NullPointerException
at Bank.getMaximum(Bank.java:43)
at BankTester.main(BankTester.java:24)

codice:
public class BankAccount {
	
	public BankAccount(int anAccountNumber){
		accountNumber = anAccountNumber;
		balance = 0;
	}
	
	public BankAccount(int anAccountNumber, double initialBalance){
		accountNumber = anAccountNumber;
		balance = initialBalance;
	}
	
	public double getAccountNumber(){
		return accountNumber;
	}
	
	public void deposit(double amount){
		double newBalance = balance + amount;
		balance = newBalance;
	}
	
	public void withdraw(double amount){
		double newBalance = balance - amount;
		balance = newBalance;
	}
	
	public double getBalance(){
		return balance;
	}
	
	private int accountNumber;
	private double balance;

}


import java.util.ArrayList;

public class ArrayListTester {

	public static void main(String[] args) {
		
		ArrayList<BankAccount> accounts = new ArrayList<BankAccount>();
		
		accounts.add(new BankAccount(1001));
		accounts.add(new BankAccount(1015));
		accounts.add(new BankAccount(1729));
		accounts.add(1, new BankAccount(1008));
		accounts.remove(0);
		
		System.out.println("Size: "+accounts.size());
		System.out.println("Expected: 3");
		BankAccount first = accounts.get(0);
		System.out.println("First account number: "+first.getAccountNumber());
		System.out.println("Expected: 1008");
		BankAccount last = accounts.get(accounts.size() - 1);
		System.out.println("Last account number: "+last.getAccountNumber());
		System.out.println("Expected: 1729");
	}

}


import java.util.ArrayList;

public class Bank {

	public Bank(){
		accounts = new ArrayList<BankAccount>();
	}
	
	public void addAccount(BankAccount a){
		accounts.add(a);
	}
	
	public double getTotalBalance(){
		double total = 0;
		for(BankAccount a : accounts){
			total = total + a.getBalance();
		}
		return total;
	}
	
	public int count(double atLeast){
		int matches = 0;
		for(BankAccount a : accounts){
			if(a.getBalance() >= atLeast)
				matches++;
		}
		return matches;
	}
	
	public BankAccount find(int accountNumber){
		for(BankAccount a : accounts){
			if(a.getAccountNumber() == accountNumber)
				return a;
		}
		return null;
	}
	
	public BankAccount getMaximum(){
		if(accounts.size() == 0)
			return null;
		for(int i = 1; i < accounts.size(); i++){
			BankAccount a = accounts.get(i);
			if(a.getBalance() > largestYet.getBalance())
				largestYet = a;
		}
		return largestYet;
	}
	
	private ArrayList<BankAccount> accounts;
	private BankAccount largestYet;

}



public class BankTester {

	public static void main(String[] args) {
		
		Bank firstBankOfJava = new Bank();
		firstBankOfJava.addAccount(new BankAccount(1001, 20000));
		firstBankOfJava.addAccount(new BankAccount(1015, 10000));
		firstBankOfJava.addAccount(new BankAccount(1729, 15000));
		
		double threshold = 15000;
		int c = firstBankOfJava.count(threshold);
		System.out.println("Count: "+ c);
		System.out.println("Expected: 2");
		
		int accountNumber = 1015;
		BankAccount a = firstBankOfJava.find(accountNumber);
		if(a == null)
			System.out.println("No matching account");
		else
			System.out.println("Balance of matching account: "+ a.getBalance());
		System.out.println("Expected: 10000");
		
		BankAccount max = firstBankOfJava.getMaximum();
		System.out.println("Account with largest balance: "+ max.getAccountNumber());
		System.out.println("Expected: 1001");

	}

}