Problema como adicionar um arraylist em uma posicao especificada de outro ArrayList?

Classe Cliente

import java.util.ArrayList;
import java.util.Arrays;

public class Cliente 
{
	private int codigoCliente;
	private String nome;
	private String endereco;
	private String telefone;
	private String cep;
	private String email;
	private ArrayList<Animal> animais = new ArrayList();
	
	
	public ArrayList<Animal> getAnimais() {
		return animais;
	}
	public void setAnimais(ArrayList<Animal> animais) {
		this.animais = animais;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	
	public String getCep() {
		return cep;
	}
	public void setCep(String cep) {
		this.cep = cep;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public int getCodigoCliente() {
		return codigoCliente;
	}
	public void setCodigoCliente(int codigoCliente) {
		this.codigoCliente = codigoCliente;
	}
	
	
	
	public Cliente(int codigoCliente, String nome, String endereco, String telefone, String cep, String email,
			ArrayList<Animal> animais) {
		super();
		this.codigoCliente = codigoCliente;
		this.nome = nome;
		this.endereco = endereco;
		this.telefone = telefone;
		this.cep = cep;
		this.email = email;
		this.animais = animais;
	}



	
	@Override
	public String toString() {
		return "Cliente [codigoCliente=" + codigoCliente + ", nome=" + nome + ", endereco=" + endereco + ", telefone="
				+ telefone + ", cep=" + cep + ", email=" + email + ", animais=" + animais.toString() + "]";
	}

Classe Animal

import java.util.ArrayList;
import java.util.Arrays;

public class Animal 
{
	private String nomeAnimal;
	private int idadeAnimal;
	private String sexoAnimal;
	private Especie especieAnimal;
	private ArrayList<Tratamento> tratamentos;
	
	
	

	public Especie getEspecieAnimal() {
		return especieAnimal;
	}
	public void setEspecieAnimal(Especie especieAnimal) {
		this.especieAnimal = especieAnimal;
	}
	public ArrayList<Tratamento> getTratamentos() {
		return tratamentos;
	}
	public void setTratamentos(ArrayList<Tratamento> tratamentos) {
		this.tratamentos = tratamentos;
	}
	public String getNomeAnimal() {
		return nomeAnimal;
	}
	public void setNomeAnimal(String nomeAnimal) {
		this.nomeAnimal = nomeAnimal;
	}
	public int getIdadeAnimal() {
		return idadeAnimal;
	}
	public void setIdadeAnimal(int idadeAnimal) {
		this.idadeAnimal = idadeAnimal;
	}
	public String getSexoAnimal() {
		return sexoAnimal;
	}
	public void setSexoAnimal(String sexoAnimal) {
		this.sexoAnimal = sexoAnimal;
	}
	
	public Animal(String nomeAnimal, int idadeAnimal, String sexoAnimal, Especie especieAnimal,
			ArrayList<Tratamento> tratamentos) {
		super();
		this.nomeAnimal = nomeAnimal;
		this.idadeAnimal = idadeAnimal;
		this.sexoAnimal = sexoAnimal;
		this.especieAnimal = especieAnimal;
		this.tratamentos = tratamentos;
	}
	
	@Override
	public String toString() {
		return "Animal [nomeAnimal=" + nomeAnimal + ", idadeAnimal=" + idadeAnimal + ", sexoAnimal=" + sexoAnimal
				+ ", especieAnimal=" + especieAnimal + ", tratamentos=" + tratamentos + "]";
	}
	
	
	

}

Entao tenho essas duas classes em um relacionamento 1:N,ou seja um Cliente pode ter muitos animais e os animais pertencem a um cliente especifico.
.
ClasseChamada

import java.util.ArrayList;
import java.util.Scanner;

public class ClasseChamada {

	public static void main(String[] args) 
	{
		
		/*Menu
		 * 1- cadastrar Cliente
		 * 2 - Listar Clientes Cadastrados
		 * 3 - Listar Animais por cliente
		 * 4- informaçoes do cliente
		 * 5- Realizar tratamento
		 * 6- listar tramentos por animal
		 * 7- Marcar Consulta
		 * 8- listar historico do animal
		 */
		
		
		//Cliente
			int codigo=0;
			String nome;
			String end;
			String tel;
			String cep;
			String email;
			
			
		//Animal
			String nomeAnimal;
			int idade;
			String sexo;
			
		//Tratamento
			String datainicio;
			String datafinal;
			
		//Consulta
			String dataConsulta;
			String historico;
		//Listas
			ArrayList <Cliente> clientes = new ArrayList();
			ArrayList <Animal> animais = new ArrayList();
			
			//Variavies
			  int op=0;
			  int indice=0;
			  Scanner entrada = new Scanner(System.in);
			
			while(true) 
			{
				System.out.println("------------------------------------------------------");
				System.out.println("1 -Cadastrar Cliente");
				System.out.println("2 - cadastrar Animal");
				System.out.println("3- Lista de clientes ");
				System.out.println("4 -  Marcar Consulta "); 
				System.out.println("5 - Opçao: "); 
				op = entrada.nextInt();
				
				switch(op) 
				{
					case 1:
					{
						
						System.out.println("Codigo Cliente:");
						codigo = entrada.nextInt();
						System.out.println("Nome:");
						nome = entrada.next();
						System.out.println("Telefone:");
						tel = entrada.next();
						System.out.println("Email:");
						email = entrada.next();
						System.out.println("CEP:");
						cep = entrada.next();
						System.out.println("Endereço:");
						end = entrada.next();
						clientes.add(new Cliente(codigo, nome, email, tel, cep, end, animais));
						break;
					}
					case 2:
					{
						
						System.out.println("Digite o codigo do Cliente:");
						codigo = entrada.nextInt();
						if(codigo==Clientes(clientes)) 
						{
							System.out.println("---------Cadastrar Animais-------");
							System.out.println("Nome do Animal:");
							nomeAnimal = entrada.next();
							System.out.println("Idade do Animal:");
							idade = entrada.nextInt();
							System.out.println("Sexo do Animal:");
							sexo = entrada.next();
							animais.add(new Animal(nomeAnimal, idade, sexo, null, null));
							//Problema como adicionar um arraylist em uma posicao especificada de outro ArrayList?;
						}
						
						
					}
					case 3://Lista Clientes
					{
						System.out.println("Lista de clientes");
						for(Cliente x:clientes ) 
						{
							System.out.println(x.getNome()+"\n"+x.getAnimais());
						}
					}
				}
				
				
			}

	}
	
	static int Clientes(ArrayList<Cliente> clientes) //Procura o codigo do cliente dentro do ArrayList
	{
		for(Cliente x:clientes) 
		{
			return x.getCodigoCliente();
		}
		return 0;
	}

}

Tenho essa classe aqui que instancia vários clientes e animais. Crie um ArrayList para instanciar vários clientes para cada cliente eu tenho ArrayList com uma ou varias instancias de animais,

Depois de cadastrar os clientes
na hora de listar (pedi para listar somente o nome e os animais do cliente)

A saida sem Cadastrar os animais é essa:

Maria
[ ]
Joao
[ ]

até ai tudo certo e esta cadastrando os clientes, mas quando cadastro os animais para dois clientes especificos
a saida é

Maria
[ Animal [nomeAnimal=Brutos, idadeAnimal=2, sexoAnimal=M, especieAnimal=null, tratamentos=null] ]
Joao
[ Animal [nomeAnimal=Brutos, idadeAnimal=2, sexoAnimal=M, especieAnimal=null, tratamentos=null] ]

ele retorna a mesma instancia de Animal

O programa instancia a classe animal e coloca no ArrayList,mas parece que só instancia uma vez a classe, então o problema é como instanciar o

Olha, eu modificaria a classe Cliente, removeria o setter para animais e faria algo assim:

private ArrayList<Animal> animais = new ArrayList();

public ArrayList<Animal> getAnimais() {
    return animais;
}

public void addAnimal(Animal animal) {
    this.animais.add(animal);
}

Aí, no case de cadastrar animal, é so invocar:

codigo = entrada.nextInt();
Cliente cliente = metodoQueRetornaOClienteAPartirDoCodigoDoCliente(codigo);
//Linhas onde você pega os dados do animal
cliente.addAnumal(animal);

Consegui resolver o problema era que inves de criar um ArrayList para cada cliente,eu estava adicionando um arraylist ja criado,entao cada vez que cadastrava um novo animal ele adicionava as informaçoes no ArrayList

cliente.getAnimais().add(new Animal(nomeAnimal, idade, sexo, new ArrayList())); modifiquei a linha que adiciona animal,agora cada cliente tem o seu arraylist individual :slight_smile:

enfim problema resolvido