public void fazAposta(Aposta ap, Campeonato camp) throws SaldoInsuficienteException, ClassificacaoErradaException, NaoExisteNomeEquipaException, NaoExisteCircuitoException, CorridaJaExecutadaException
    {
        double valor = ap.getValor();
        int classificacao = ap.getClassificacao();
        if(camp.getNcorrida() <= ap.getNrCircuito())
        {
            if(camp.getCircuitos().containsKey(ap.getNrCircuito()))
            {
                if(camp.getEquipas().containsKey(ap.getNomeEquipa()))
                {
                    if(classificacao == 1 || classificacao == 2 || classificacao == 3)
                    {
                        if( this.saldo-valor >= 0 )
                        {
                            this.saldo = this.saldo-valor;
                            this.lucro = this.lucro-valor;
                            this.conta.add(-valor);
                            this.lapostas.add(ap);
                        }
                        else
                        {
                            throw new SaldoInsuficienteException("Erro! Saldo insuficiente para a aposta em questão.\n"); 
                        }
                    }
                    else
                    {
                        throw new ClassificacaoErradaException("Erro! Aposte apenas para as três primeiras classificações.\n");
                    }
                }
                else
                {
                    throw new NaoExisteNomeEquipaException("Erro! Não existe a Equipa em que deseja apostar.\n");
                }
            }
            else
            {
                throw new NaoExisteCircuitoException("Erro! Não existe o Circuito em que deseja apostar.\n");  
            }
        }
        else
        {
            throw new CorridaJaExecutadaException("Erro! O Circuito para o qual deseja apostar já foi concluído.\n");
        }
    }