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:
[code]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);
}[/code]
Se alguem puder me ajudar…
Obrigado
[code]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));
}
}
}[/code]
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.
>
# 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:
[code]# contas.get(i).getRelatorio().get(i).setOperacao(operacao);
contas.get(i).getRelatorio().get(i).setData(formatarDate.format(data)); [/code]
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) {
}
[quote=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!
[code]
for (Object string : objectsList) {
}
[/code][/quote]
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.
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