Pessoal, nunca usei funções recursivas além do que vi na faculdade, porém estou com uma situação onde resolvi usar e estou me deparando com um problema, após executar a recursão até o ponto de saída, o programa volta a executar a função, parece que fica na pilha. A situação é a seguinte, tenho um objeto com 2 atributos, o nome do produto e o valor, e o meu programa recebe uma lista de objetos desse tipo, quando o valor do patrimônio for 0, quero excluí-lo.
Utilizando uma iteração normal, quando eu fazia o if para descobrir se aquela instância do objeto tinha o valor 0, eu excluia a mesma da lista, porém depois ao devolver a lista para o método chamador recebia uma mensagem do tipo ?The collection was modified, etc…? , alguma coisa assim.
Então fiz uma aplicação standalone para isolar o teste, segue abaixo, com os comentários do ponto onde o método volta a ser executado. Sei que existem outras maneiras de resolver esse problema até mesmo de maneira mais elegante mas eu gostaria de usar recursão até para fins de estudo. Grato.
public class Resumo
{
private String produto;
private double patrimonio;
public Resumo(String produto, double patrimonio)
{
this.produto = produto;
this.patrimonio = patrimonio;
}
public String getProduto() {
return produto;
}
public void setProduto(String produto) {
this.produto = produto;
}
public double getPatrimonio() {
return patrimonio;
}
public void setPatrimonio(double patrimonio) {
this.patrimonio = patrimonio;
}
}
import java.util.*;
public class Recursive
{
public static void main(String args[])
{
List<Resumo> res = new ArrayList<Resumo>();
res.add(new Resumo("Fundos", 1000));
res.add(new Resumo("Renda Fixa", 0));
res.add(new Resumo("Renda var", 0));
Teste(res);
}
static void Teste(List<Resumo> res)
{
for (Resumo obj : res)
{
if (obj.getPatrimonio() == 0)
{
res.remove(obj);
Teste(res);
}
}
Exibe(res);
}
static void Exibe(List<Resumo> res)
{
try
{
for (Resumo obj : res)
{
System.out.println(obj.getProduto());
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
Poderiam me dar um help? Obrigado.