Recursiva

5 respostas
oitathi

gente, alguém pode me dar uma dica de como fazer o seguinte método de forma recursiva???
obrigada!

public static void main(String[] args) {
		ArrayList<Concessionaria> concessionarias= new ArrayList<Concessionaria>();
		Carro[]carrosFiat={new Carro("Palio","2005")};
		Carro[]carrosVolks={new Carro("Gol","1999"), new Carro("Fox","2003")};
		concessionarias.add(new Concessionaria("Fiat",carrosFiat));
		concessionarias.add(new Concessionaria("Volks", carrosVolks));
		
		for(int i=0; i<concessionarias.size();i++){
			for(int j=0; j< concessionarias.get(i).getCarros().length;j++){
				System.out.println(concessionarias.get(i).getCarros()[j].getModelo()+" "+concessionarias.get(i).getCarros()[j].getAno());
			}
		}
	}

5 Respostas

ederfreitas

Eis o caminho das pedras...

public void imprimir(List<Concessionaria> concessionarias){
   
  while(concessionarias.hasNext()){
      Concessionaria concessionaria = concessionarias.next();
    // Aqui sua lógica para imprimir
    {

  
    }
     // Chama o método novamente.
     imprimir(concessionarias);
   }

}
oitathi
Oi cara! Primeiro, valeu pela ajuda. Mas tô tendo alguns probleminhas na hora de implementar isso... vamos lá: eu tenho que usar um iterator para poder usar o hasNext(), certo? eu fiz assi:
public static void imprimir(ArrayList<Concessionaria> concessionarias){  
		  Iterator<Concessionaria> itr = concessionarias.iterator(); 
		  while(itr.hasNext()){  
		      Concessionaria concessionaria = itr.next();  
		    // Aqui sua lógica para imprimir  
		      System.out.println(concessionaria.getMarca());
		      //System.out.println(concessionaria.getCarros().)
		    
		    }  
		     // Chama o método novamente.  
		     imprimir(concessionarias);  
		   }  
		  
		}
Só que tah dando errado. Vc poderia me ajudar me explicando o q tah errado? tks
oitathi

eu mudei seu método um pouco, mas apesar de ter ficado mais limpo, ele ainda não é recursivo:

public static void imprimir(ArrayList<Concessionaria> concessionarias){  
		  Iterator<Concessionaria> itr = concessionarias.iterator(); 
		  while(itr.hasNext()){  
		      Concessionaria concessionaria = itr.next();  
		      System.out.println(concessionaria.getMarca());
		      for(int i=0; i<concessionaria.getCarros().length;i++){
		    	  System.out.println(concessionaria.getCarros()[i].getModelo());
		      }
		  }  
	}

Como posso deixá-lo recursivo?

ederfreitas

Em vez da lista como parâmetro adicione o iterator mesmo;

public static void imprimir(Iterator<Concessionaria> it){    
...

Abaixo do seu for você tem que adicionar a chamada do método novamente, assim:

for(int i=0; i<concessionaria.getCarros().length;i++){  
   System.out.println(concessionaria.getCarros()[i].getModelo());  
}  

imprimir(it);

A propósito, por que você precisa de recursão em uma solução simples como essa?

oitathi

então cara, eu não posso ter um for dentro de outro pq eu não sei quantas camadas eu vou ter… ou, seja, pode ter vezes q eu vou chamar o método com 2 laços , em outra com 3, e em outra com nenhum…
bom, eu mudei alumas coisas e aparentemente deu certo, porém, gostaria que se alguém soubesse de um modo mais limpo de escrever isso me indicasse!

public static void imprimir3(ArrayList<Concessionaria> concessionarias, int num){
		System.out.println(concessionarias.get(num).getMarca());
		if(concessionarias.get(num).getCarros().length > 0){
			for(int i=0; i<concessionarias.get(num).getCarros().length;i++){
				System.out.println(concessionarias.get(num).getCarros()[i].getModelo());
			}
		}
		while(num+1 < concessionarias.size()){
			imprimir3(concessionarias,++num);
		}
	}

obrigada

Criado 19 de novembro de 2012
Ultima resposta 19 de nov. de 2012
Respostas 5
Participantes 2