Sistema bancario java

ola estou com problema em duas classes do meu sistema bancario , a classe cliente especial e a classe gerente, ambas não estão atualizando no executa banco isso está dando problema também no cobrar emprestimo, alguem pode me ajudar

public class Cliente extends Pessoa implements InterfaceCliente{
	static final int dividaMaxima = 30000;
	static final String tipo = "C";
	private int valorContaCorrente;
	private int valorDaDivida;
	
	/* Construtor da Classe Cliente
	 * Este construtor invoca o construtor da classe Pessoa e inicializa os dois atributos 
	 * do objeto que esta sendo instanciado.
	 */
	Cliente(String nome, int cpf, int valorInicial){
		super(nome, cpf);
		valorContaCorrente = valorInicial;
		valorDaDivida = 0;
	}
	
	/* Metodo que retorna o valor do atributo tipo do objeto atual */
	String retornaTipo() {
		return tipo;
	}	
	
	
	protected int getValorContaCorrente() {
		return valorContaCorrente;
	}
	
	protected int getValorDaDivida() {
		return valorDaDivida;
	}
	
	protected void setValorContaCorrente(int valor) {
		valorContaCorrente = valor;
	}
	
	protected void setValorDaDivida(int valor) {
		valorDaDivida = valor;
	}
	

	/* Metodo para o cliente atual obter um emprestimo de acordo com o valor passado por parametro
	 *   Caso o valor do parametro seja menor ou igual a zero, o metodo deve retornar false
	 *   Caso contrario ha duas situacoes:
	 *     1a) se o valor do parametro mais o valor do atributo valorDaDivida for maior do
	 *         que o valor da constante dividaMaxima, o metodo deve retornar false 
	 *     2a) caso contrario, o atributo valorDaDivida deve ser incrementado em valor, o atributo
	 *         valorContaCorrente deve ser incrementado em valor e o metodo deve retornar true
	 */
	public boolean obterEmprestimo(int valor) {
	 if(valor<= 0) {
		 return false;}
	 else {
	 if(valor+valorDaDivida> dividaMaxima) {
		 return false;}
	 else {
		 valorDaDivida = valorDaDivida + valor;
		 valorContaCorrente= valorContaCorrente + valor;
		 return true;}}
	 }
	
	

	/* Metodo para o cliente atual pagar parte de sua divida de acordo com o valor passado por parametro
	 *   Caso o valor do parametro seja menor ou igual a zero, o metodo deve retornar false
	 *   Caso contrario ha duas situacoes:
	 *     1a) se o valor do parametro for maior do que o valorDaDivida ou for maior do que 
	 *         valorContaCorrente, o metodo deve retornar false 
	 *     2a) caso contrario, o atributo valorDaDivida deve ser decrementado em valor, o atributo
	 *         valorContaCorrente deve ser decrementado em valor e o metodo deve retornar true
	 */
	public boolean pagarEmprestimo(int valor) {
		if(valor<=0) {
			return false;} 
		else {
		 if (valor > valorDaDivida || valor > valorContaCorrente) {
			return false;}
		else{
			valorDaDivida = (valorDaDivida - valor);
			valorContaCorrente =(valorContaCorrente - valor);
		    return true;}}}
	
	
	
	/* Metodo que retorna true caso valorContaCorrente seja menor do que valorDaDivida.
	 * Caso contrario, retorna false.
	 */
	public boolean negativado() {
		if(valorContaCorrente < valorDaDivida) {
			return true;
		}
		
		return false;
	}
	

	/* Metodo para o cliente atual realizar um saque do valor passado por parametro
	 *   Caso o valor do parametro seja menor ou igual a zero, o metodo deve retornar false
	 *   Caso contrario ha duas situacoes:
	 *     1a) se o valor do parametro for maior do que o valor do atributo valorContaCorrente, o 
	 *         metodo deve retornar false
	 *     2a) caso contrario, o atributo valorContaCorrente deve ser decrementado em valor e o
	 *         metodo deve retornar true
	 */
	public boolean realizarSaque(int valor) {
		if(valor<=0) {
			return false;} 
		else {
		if(valor > valorContaCorrente) {
			return false;}
		else {
			valorContaCorrente = (valorContaCorrente - valor);
		    return true;}}
		
	}
}


public class ClienteEspecial extends Cliente{
	static final int dividaMaxima = 50000;
	static final String tipo = "CE";
	
	/* Construtor da Classe ClienteEspecial
	 * Este construtor invoca o construtor da classe Cliente.
	 */
	ClienteEspecial(String nome, int cpf, int valor){
		super(nome, cpf, valor);
	}
	
	/* Metodo que retorna o valor do atributo tipo do objeto atual */
	String retornaTipo() {
		return tipo;
	}
	
	public boolean obterEmprestimo(int valor) {
		int Divida= super.getValorDaDivida();
		int ContCor = super.getValorContaCorrente();
		if(valor<= 0) {
			 return false;}
		else {
		 if (valor+Divida> dividaMaxima) {
			 return false; }
		 else {
			 Divida = (Divida-valor);
			 ContCor = (ContCor - valor);
			 return true;}
	}}
}
//cliente especial é uma subclasse de cliente vai 





public class Gerente extends Pessoa implements InterfaceGerente{
	private static final String tipo = "G";
	private Cliente[] clientes;
	private int numClientes;

	/* Construtor da Classe Gerente
	 * Este construtor invoca o construtor da classe Pessoa e inicializa os dois atributos 
	 * do objeto que esta sendo instanciado.
	 */
	Gerente(String nome, int cpf){
		super(nome, cpf);
		clientes = new Cliente[20];
		numClientes = 0;
	}

	
	/* Metodo que retorna o valor do atributo tipo do objeto atual */
	String retornaTipo() {
		return tipo;
	}
	
	
	/* Metodo para imprimir informacoes sobre os clientes gerenciados pelo gerente atual
	 */
	void imprimirClientes(){
		Cliente atual;
		System.out.println("\tNumero de clientes: " + numClientes);
		for (int c=0; c < numClientes; c++){
			atual = clientes[c];
			System.out.println("\t" + (c+1) + "\t" + atual.retornaTipo() + "\t" + atual.nome + "\t" + atual.cpf + "\t" + atual.getValorContaCorrente() + "\t" + atual.getValorDaDivida() + "\t" + atual.negativado());
		}
	}


	/* Metodo para adicionar um cliente no arranjo de clientes do gerente atual.
	 * Caso o numero de clientes seja igual a 20, nao deve adicionar e deve retornar false.
	 * Caso contrario, ha duas situacoes: 
	 *   1a: o cliente ja consta no arranjo de clientes (verifique isso usando o numero do cpf),
	 *       neste caso o cliente nao deve ser reinserido e o metodo deve retornar false; 
	 *   1a: o cliente passado como parametro nao consta no arranjo de clientes: o cliente 
	 *       deve ser adicionado na posicao numClientes, o atributo numClientes deve ser 
	 *       incrementado em 1 e o metodo deve retornar true. 
	 */
	public boolean adicionarCliente(Cliente cliente) {
	 if(numClientes<20) {
		for ( int j=0; j < numClientes; j++) { 
		    if(this.clientes[j].cpf== cliente.cpf) {
		    	return false;}}
			if(numClientes< 20 ) {
			  this.clientes[numClientes]=cliente;
			  numClientes++;
			  return true;
		}}
		return false;
	}

	
	/* Metodo para cobrar os emprestimos de todos os clientes do gerente atual.
	 * Para cada um dos clientes presentes no arranjo clientes, este metodo deve:
	 *   - nao fazer nada para o cliente, caso seu valorDaDivida seja igual a zero
	 *   - caso contrario, ha duas situacoes:
	 *     1a) se o valorContaCorrente do cliente for maior ou igual ao valorDaDivida, deve
	 *         fazer o cliente pagar a divida, isto e, o valorContaCorrente sera atualizado, 
	 *         descontando-se o valor da divida e o valorDaDivida sera zerado.
	 *     2a) se o valorContaCorrente do cliente for menor do que o valorDaDivida, 
	 *         deve fazer o cliente pagar parte da divida, isto e, o valorDaDivida 
	 *         sera atualizado, tendo seu valor diminuido pelo valorContaCorrente e 
	 *         o valorContaCorrente sera zerado.
	 */
	public void cobrarTodosEmprestimos() {
	Cliente emprest;
	 for ( int j=0; j < this.numClientes; j++) {
		emprest = clientes[j];
		int Divida = emprest.getValorDaDivida(); 
		int ContaCorrente = emprest.getValorContaCorrente();
		if(Divida==0) {
			ContaCorrente = ContaCorrente;
			System.out.println(ContaCorrente);}
		else {
			if(ContaCorrente>=Divida) {
				ContaCorrente =(ContaCorrente - Divida);
				Divida=0;
				System.out.println(ContaCorrente);}
			else if(ContaCorrente< Divida) {
				Divida= (Divida - ContaCorrente);
				ContaCorrente=0;
				System.out.println(Divida);
			}
		}
	}
	 }
			  
		  
	  		  
}
public abstract class Pessoa {
	String nome;
	int cpf;
	
	Pessoa(String nome, int cpf){
		this.nome = nome;
		this.cpf = cpf;
	}
	
	abstract String retornaTipo();
	
}
public class ExecutaBanco {
	public static void main(String[] args){
		
		System.out.println("ATENCAO: Nem todas as caracteristicas do enunciado sao testadas neste exemplo.");
		System.out.println("         Cabe a cada aluno testar cuidadosamente seu EP.\n");
		
		System.out.println("*** Instanciando Clientes **************************************");
		Cliente c1 = new Cliente("Cliente A", 22222, 10000);
		Cliente c2 = new ClienteEspecial("Cliente B", 33333, 2000);
		Cliente c3 = new Cliente("Cliente C", 44444, 30000);
		Cliente c4 = new Cliente("Cliente D", 55555, 10);

		System.out.println("*** Instanciando Gerentes **************************************");
		Gerente ger1 = new Gerente("Gerente 1", 12345);
		Gerente ger2 = new Gerente("Gerente 2", 12121);
		
		System.out.println("*** Instanciando um Banco **************************************");
		Banco meuBanco = new Banco();
		
		
		
		System.out.println("*** Adicionando Clientes ao Gerente 1 **************************");
		
		if (ger1.adicionarCliente(c1)) System.out.println("Cliente '"  +c1.nome + "' adicionado corretamente.");
		else System.out.println("Cliente '"  + c1.nome + "' nao pode ser adicionado.");
		
		if (ger1.adicionarCliente(c2)) System.out.println("Cliente '"  +c2.nome + "' adicionado corretamente.");
		else System.out.println("Cliente '"  + c2.nome + "' nao pode ser adicionado.");
		
		if (ger1.adicionarCliente(c2)) System.out.println("Cliente '"  +c2.nome + "' adicionado corretamente.");
		else System.out.println("Cliente '"  + c2.nome + "' nao pode ser adicionado.");
		
		if (ger1.adicionarCliente(c3)) System.out.println("Cliente '"  + c3.nome + "' adicionado corretamente.");
		else System.out.println("Cliente '"  + c3.nome + "' nao pode ser adicionado.");
		
		System.out.println("*** Adicionando Clientes ao Gerente 2 **************************");
		
		if (ger2.adicionarCliente(c3)) System.out.println("Cliente '"  + c3.nome + "' adicionado corretamente.");
		else System.out.println("Cliente '"  + c3.nome + "' nao pode ser adicionado.");
		
		if (ger2.adicionarCliente(c4)) System.out.println("Cliente '"  + c4.nome + "' adicionado corretamente.");
		else System.out.println("Cliente '"  + c4.nome + "' nao pode ser adicionado.");
		
		System.out.println("*** Adicionando Gerentes ao Banco ******************************");
		
		meuBanco.adicionarGerente(ger1);
		meuBanco.adicionarGerente(ger2);
		
		meuBanco.imprimir();
		
		
		System.out.println("*** Testando o metodo obterEmprestimo **************************");
		
		if (c1.obterEmprestimo(20000))  System.out.println("Cliente '"  + c1.nome + "' obteve o emprestimo solicitado.");
		else  System.out.println("Cliente '"  + c1.nome + "' nao obteve o emprestimo solicitado.");
		

		if (c3.obterEmprestimo(20000))  System.out.println("Cliente '"  + c3.nome + "' obteve o emprestimo solicitado.");
		else  System.out.println("Cliente '"  + c3.nome + "' nao obteve o emprestimo solicitado.");

		
		if (c2.obterEmprestimo(20000))  System.out.println("Cliente '"  + c2.nome + "' obteve o emprestimo solicitado.");
		else  System.out.println("Cliente '"  + c2.nome + "' nao obteve o emprestimo solicitado.");


		if (c4.obterEmprestimo(20000))  System.out.println("Cliente '"  + c4.nome + "' obteve o emprestimo solicitado.");
		else  System.out.println("Cliente '"  + c4.nome + "' nao obteve o emprestimo solicitado.");

		
		meuBanco.imprimir();
		
		System.out.println("*** Testando o metodo realizarSaque ****************************");
		
		if (c2.realizarSaque(12345))  System.out.println("Cliente '"  + c2.nome + "' realizou saque solicitado.");
		else  System.out.println("Cliente '"  + c2.nome + "' nao pode realizar o saque solicitado.");

		if (c2.realizarSaque(12345))  System.out.println("Cliente '"  + c2.nome + "' realizou saque solicitado.");
		else  System.out.println("Cliente '"  + c2.nome + "' nao pode realizar o saque solicitado.");

		if (c1.realizarSaque(10000))  System.out.println("Cliente '"  + c1.nome + "' realizou saque solicitado.");
		else  System.out.println("Cliente '"  + c1.nome + "' nao pode realizar o saque solicitado.");


		if (c1.realizarSaque(1))  System.out.println("Cliente '"  + c1.nome + "' realizou saque solicitado.");
		else  System.out.println("Cliente '"  + c1.nome + "' nao pode realizar o saque solicitado.");

		
		meuBanco.imprimir();
		
		
		
		System.out.println("*** Testando o metodo pagarEmprestimo **************************");
		if (c1.pagarEmprestimo(100))  System.out.println("Cliente '"  + c1.nome + "' pagou (parte de) sua divida.");
		else  System.out.println("Cliente '"  + c1.nome + "' nao pode pagar (parte de) sua divida.");


		if (c2.pagarEmprestimo(100))  System.out.println("Cliente '"  + c2.nome + "' pagou (parte de) sua divida.");
		else  System.out.println("Cliente '"  + c2.nome + "' nao pode pagar (parte de) sua divida.");
		
		if (c3.pagarEmprestimo(100))  System.out.println("Cliente '"  + c3.nome + "' pagou (parte de) sua divida.");
		else  System.out.println("Cliente '"  + c3.nome + "' nao pode pagar (parte de) sua divida.");

		if (c4.pagarEmprestimo(100))  System.out.println("Cliente '"  + c4.nome + "' pagou (parte de) sua divida.");
		else  System.out.println("Cliente '"  + c4.nome + "' nao pode pagar (parte de) sua divida.");

		
		
		meuBanco.imprimir();
		
		System.out.println("*** Testando o metodo cobrarTodosEmprestimos *******************");
		
		ger1.cobrarTodosEmprestimos();
		meuBanco.imprimir();
		
		ger2.cobrarTodosEmprestimos();
		meuBanco.imprimir();
		
		
		System.out.println("\nATENCAO: Nem todas as caracteristicas do enunciado sao testadas neste exemplo.");
		System.out.println("         Cabe a cada aluno testar cuidadosamente seu EP.\n");
		
		
	}
}