Problema com recursao: objeto passado nao eh atualizado

2 respostas
P

Opa :smiley:

Tenho uma recursao para contar registros mas o objeto que passo para o metodo, nao eh atualizado:

private void metodo(){ 
               ...
               Integer scenariosPerScenarios =new Integer(0);
		
		for(int i=0; i<MODULES.length; i++){
			String module = MODULES[i];
			Collection<AllListsTO> tmp = allListsDAO.findPerDescription(module);
			for(AllListsTO allListsTO : tmp){
				Collection<AllListsTO> sons = allListsDAO.findPerFather(allListsTO.getAlItemId());
				countScenariosRecurs(sons, scenariosPerScenarios);
			}
		}

	}

	private void countScenariosRecurs(Collection<AllListsTO> sons, Integer count){
		System.out.println(count);
		if(sons.size() > 0) {
			for(AllListsTO allListsTO : sons){
				if(!allListsTO.getAlDescription().equalsIgnoreCase("AC")){
					count++;
				}
				Collection<AllListsTO> sns = allListsDAO.findPerFather(allListsTO.getAlItemId());
				countScenariosRecurs(sns, count);
			}
		}
	}

O que esta sendo feito errado que ele sempre me retorno 0 para o objeto scenariosPerScenarios?

Abs

2 Respostas

mgarcia

Em Java não existe esta passagem por referência para tipos como Integer…

no seu método recursivo retorne o valor desejado para a variável que vai funcionar…

L

Caro colega, vc esta passando uma referencia de um objeto Integer, porem vc esta fazendo o uso de autoboxing “count++”, ou seja, um objeto Integer é imutavel então na hora que vc compila o seu código o ele vai ficar parecido com este:

private void countScenariosRecurs(Collection<AllListsTO> sons, Integer count){  
     System.out.println(count);  
     if(sons.size() > 0) {  
        for(AllListsTO allListsTO : sons){  
             if(!allListsTO.getAlDescription().equalsIgnoreCase("AC")){  
                [b] count = new Integer(count.intValue() + 1 );  // Aqui esta mudando a referencia do objeto[/b]
             }  
             Collection<AllListsTO> sns = allListsDAO.findPerFather(allListsTO.getAlItemId());  
             countScenariosRecurs(sns, count);  
         }  
     }  
 }

para resolver seu problema mude o retorno do seu método de void para Integer.

Criado 1 de julho de 2009
Ultima resposta 1 de jul. de 2009
Respostas 2
Participantes 3