Não consigo encontrar a Exception

5 respostas
K

Galera, boa tarde.

Estou tendo dificuldades em encontrar a Exception do código abaixo.
Fiquei tentando várias vezes, mas não localizo de forma alguma.

public void gerarRelatorio(String operacao, PessoaFisica p1)
    {
         for(int i=0; i<contas.size(); i++)
            {
                Date data = new Date(System.currentTimeMillis());
                SimpleDateFormat formatarDate = new SimpleDateFormat("yyyy-MM-dd");

                if(contas.get(i).getCPF().equals(p1.getCPF()))
                {
                    contas.get(i).getRelatorio().get(i).setOperacao(operacao);
                    contas.get(i).getRelatorio().get(i).setData(formatarDate.format(data));
                }
            }
       
    }
Os erros gerados são:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.RangeCheck(ArrayList.java:547)
        at java.util.ArrayList.get(ArrayList.java:322)
        at banco.Agencia.gerarRelatorio(Agencia.java:277)
        at banco.Agencia.CriarConta(Agencia.java:70)
        at banco.Main.main(Main.java:28)
Acredito que não seja necessário, mas a classe que chama a gerarRelatorio é essa:
public void CriarConta(PessoaFisica p1)
    {
        Conta conta = new Conta();

        Date data = new Date(System.currentTimeMillis());
        SimpleDateFormat formatarDate = new SimpleDateFormat("yyyy-MM-dd");

        conta.setData(formatarDate.format(data));
        conta.setValor(0);
        conta.setCPF(p1.getCPF());
        contas.add(conta);

        gerarRelatorio("Abertura de conta", p1);

    }

Se alguem puder me ajudar...

Obrigado

5 Respostas

Hellmanss
public void gerarRelatorio(String operacao, PessoaFisica p1)
    {
         for(int i=0; i<contas.size(); i++)
            {
                Date data = new Date(System.currentTimeMillis());
                SimpleDateFormat formatarDate = new SimpleDateFormat("yyyy-MM-dd");

                if(contas.get(i).getCPF().equals(p1.getCPF()))
                {
                    contas.get(i).getRelatorio().get(i).setOperacao(operacao);
                    contas.get(i).getRelatorio().get(i).setData(formatarDate.format(data));
                }
            }
       
    }
nessa parte que provavelmente está o problema:
contas.get(i).getRelatorio().get(i).setOperacao(operacao);

Pois o indice voce esta pegando do tamanho do "contas" e nao do "relatorio"... provavelmente o size da lista "contas" é maior que o size da lista de relatorios.
>

juliofsn
# Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
Você está tentando acessar um elemento de uma coleção vazia, provavelmente em uma dessas duas linhas:
# contas.get(i).getRelatorio().get(i).setOperacao(operacao);
# contas.get(i).getRelatorio().get(i).setData(formatarDate.format(data));
Christian_Borges

Você deve fazer um outro laço FOR para navegar no getRelatorio().get(i).

Por que vc não usa Foeach? É mais legível e melhor para manutenção!

for (Object string : objectsList) {
			
}
romarcio
Christian Borges:
Você deve fazer um outro laço FOR para navegar no getRelatorio().get(i).

Por que vc não usa Foeach? É mais legível e melhor para manutenção!

for (Object string : objectsList) {
			
}

Também acredito que vc deva fazer um outro laço para percorrer no getRelatorio().get(i). Vc está utilizando o mesmo do contas, talvez seja esse o problema.

K

Ae galera, desculpa essa demora pra respoder… estive com alguns problemas aqui.

Consegui resolver com a ajuda de vcs, o problema era nessa parte do código:

if(contas.get(i).getCPF().equals(p1.getCPF())) { contas.get(i).getRelatorio().get(i).setOperacao(operacao); contas.get(i).getRelatorio().get(i).setData(formatarDate.format(data)); }

Existiam elementos null, e como eu não estava tratando eles de forma correta, acabava dando o erro ^^

essa variavel contas é um arrayList de conta, que agrupava contas de pessoas fisicas e juridicas. Por agrupar essas informações, no momento de procurar pela conta fisica por exemplo, acabava se deparando com objetos null, que contiam o CNPJ em vez do CPF.

Pra resolver, criei 2 classes diferentes, ContaFisica e ContaJuridica.

Obrigado pela ajuda de todos vcs.

Abraços

Criado 27 de novembro de 2009
Ultima resposta 30 de nov. de 2009
Respostas 5
Participantes 5