1
resposta

Aula 5 Exercício 15 como executar ?

Salve ! Estou com dúvida na hora de executar o main. O retorno do método buscaPorNome() sempre retorna null. Poderiam me ajudar ?

Classe Banco

package br.com.empresa.banco;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.empresa.conta.Conta;

public class Banco {

    private String nome;
    private List<Conta> contas = new ArrayList<>();
    private Map<String, Conta> indexadoPorNome = new HashMap();

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public List<Conta> getContas() {
        return contas;
    }

    public void setContas(List<Conta> contas) {
        this.contas = contas;
    }

    public void adiciona(Conta c){
        this.contas.add(c);
        indexadoPorNome.put(c.getNome(), c);
    }

    public Conta getConta(int x){
        return contas.get(x);
    }

    public int QuantidadeDeContas(){
        return contas.size();
    }

    public Conta pega(int posicao){
        return contas.get(posicao);        
    }

    public int pegaQuantidadeDeContas(){
        return contas.size();
    }

    public Conta buscaPorNome(String nome){
        return indexadoPorNome.get(nome);
    }

}

Classe Main

package br.com.empresa.teste;

import java.util.ArrayList;
import java.util.List;

import br.com.empresa.banco.Banco;
import br.com.empresa.conta.Conta;
import br.com.empresa.conta.ContaCorrente;
import br.com.empresa.conta.ContaPoupanca;

public class TestaBanco {
    public static void main(String[] args) {
        Banco b1 = new Banco();

        List<Conta> contas = new ArrayList<>();

        ContaCorrente c1 = new ContaCorrente();
        c1.setNumero(123);
        c1.setNome("Jose");
        c1.setSaldo(2500.00);

        ContaPoupanca c2 = new ContaPoupanca();
        c2.setNumero(123);
        c2.setNome("Maria");
        c2.setSaldo(1500.00);


        contas.add(c1);
        contas.add(c2);

        b1.setContas(contas);

        System.out.println(b1.pegaQuantidadeDeContas());
        System.out.println(b1.buscaPorNome("Jose"));
    }
}

meu retorno é sempre 2(quantidade de contas) null(buscaPorNome), não sei onde estou errando. Obrigado.

1 resposta

Boa tarde, pelo que eu pude perceber você está adicionando só esqueceu de adicionar a lista de contas no mapa indexadoPorNome. Logo seu banco tem sim uma lista de contas,mas seu mapa (onde vc faz a busca) esta vazio.

Para resolver este problema acredito que você possa adicionar a seguinte linha depois de b1.setContas(contas):

contas.forEach(Banco::adiciona);