Dúvida com relação à associação entre 2 classes, utilizando um vetor como atributo (iniciante)

Pessoal, sou iniciante no java e é meu primeiro post. Se estiver postando algo de forma errada, por favor me deêm um toque, ok?

Tenho que implementar um programa onde existem 2 classes: Animal e Individuo. Essas classes possuem um relacionamento de associação, na qual um indivíduo pode ter um ou mais animais. É necessário que a classe Indivíduo possua um atributo Animal. Já me foi dito que preciso colocar este atributo Animal como vetor para listar os animais de cada indivíduo. Porém, não sei como fazer isto, como passar os parâmetros e como fazer a amarração dos animais com o indivíduos. O programa abaixo não funciona desta forma. Postei ele para que entendam o meu raciocínio e como corrigi-lo. Aguardo help de vocês.

public class Animal {
	private String classe, nomeA, sexoA;
	
    public Animal (){
    	classe="";
    	nomeA="";
    	sexoA="";
    }
    
    public void setClasse (String sclasse){
    	classe=sclasse;
    }
    
    public void setNomeA (String snomea){
    	nomeA=snomea;
    }
    
    public void setSexoA (String ssexoa){
    	sexoA=ssexoa;
    }
    
    public String getClasse ( ){
    	return classe;
    }
    
    public String getNomeA ( ){
    	return nomeA;
    }
    
    public String getSexoA ( )	{
    	return sexoA;
    }
}
public class Individuo {
	private String nome, sexo;
	private int idade, i=0;
//	aqui seria colocado o atributo animal como vetor, não sei se seria assim.
	private Animal animal[] = new Animal[3];
	
	public Individuo ( ){
		nome="";
		sexo="";
		idade=0;
		animal=null;
	}
	
	public void setNome (String snome){
		nome=snome;
	}
	
	public void setSexo (String ssexo){
		sexo=ssexo;
	}
	
	public void setIdade (int iidade){
		idade=iidade;
	}
	
	public void setAnimal (Animal aanimal){
//  não sei como definir o vetor, nem como adicionar animais nas posições.
		animal[i]=aanimal;
		i=i+1;

	}
	
	public String getNome ( ){
		return nome;
	}
	
	public String getSexo ( ){
		return sexo;
	}
	
	public int getIdade ( )	{
		return idade;
	}
	
	public Animal getAnimal(){
//	desta forma, menos ainda, sei como retornar as posições.	
		return animal[i];
			
	}
		
}

E finalmente, como rodar um programa para criar e listar os animais amarrados cada indivíduo:

import javax.swing.*;
public class CadAnimalIndividuo {
	public static void main(String[] args) {
		Individuo ind[] = new Individuo [2];
//      imaginei que cada animal adicionado cairia em uma posição do vetor Animal em Indivíduo, mas não deu certo
	   	Animal an = new Animal();
	   
		
		an=new Animal ();
	   	an.setClasse(JOptionPane.showInputDialog("Entre com a classe"));
		an.setNomeA(JOptionPane.showInputDialog("Entre com o nome do animal"));
		an.setSexoA(JOptionPane.showInputDialog("Entre com o sexo do animal"));
		ind[0]=new Individuo( );
		ind[0].setNome(JOptionPane.showInputDialog("Entre com o nome do indivíduo"));
		ind[0].setSexo(JOptionPane.showInputDialog("Entre com o sexo do indivíduo"));
		ind[0].setIdade(Integer.parseInt(JOptionPane.showInputDialog("Entre com a idade do indivíduo")));
		ind[0].setAnimal(an);
		
		
		an=new Animal ();
		an.setClasse(JOptionPane.showInputDialog("Entre com a classe"));
		an.setNomeA(JOptionPane.showInputDialog("Entre com o nome do animal"));
		an.setSexoA(JOptionPane.showInputDialog("Entre com o sexo do animal"));
		ind[1]=new Individuo( );
		ind[1].setNome(JOptionPane.showInputDialog("Entre com o nome do indivíduo"));
		ind[1].setSexo(JOptionPane.showInputDialog("Entre com o sexo do indivíduo"));
		ind[1].setIdade(Integer.parseInt(JOptionPane.showInputDialog("Entre com a idade do indivíduo")));
		ind[1].setAnimal(an);
		
		an=new Animal ();
		an.setClasse(JOptionPane.showInputDialog("Entre com a classe"));
		an.setNomeA(JOptionPane.showInputDialog("Entre com o nome do animal"));
		an.setSexoA(JOptionPane.showInputDialog("Entre com o sexo do animal"));
		ind[0].setAnimal(an);
		
		for (int i=0;i<3;i++){			
//		como faço para listar no vetor todos os animais atrelados aos indivíduos, já que ele 'puxa' só uma posição?
		JOptionPane.showMessageDialog(null, "Nome do indivíduo"+ind[0].getNome()+"\n"+"Nome do animal"+ind[0].getAnimal().getNomeA());
		}
				
	}

}

Obrigado pela atenção!!!

public class Individuo {
	private String nome, sexo;
	private int idade, i=0;
//	aqui seria colocado o atributo animal como vetor, não sei se seria assim.

         //AQUI VO CRIA E VOCE ESTA DIZENDO QUE O INDIVIDUO SÓ PODE TER 3 ANIMAIS
	private Animal animal[] = new Animal[3];
	
	public Individuo ( ){
		nome="";
		sexo="";
		idade=0;
                 //QUANDO ESTÁ CONSTRUIDO VOCE ESTA SETANDO COMO  NULL
		animal=null;
	}
	
	public void setNome (String snome){
		nome=snome;
	}
	
	public void setSexo (String ssexo){
		sexo=ssexo;
	}
	
	public void setIdade (int iidade){
		idade=iidade;
	}
	
	public void setAnimal (Animal aanimal){
//  não sei como definir o vetor, nem como adicionar animais nas posições.

                 


		animal[i]=aanimal;
		i=i+1;

	}
	
	public String getNome ( ){
		return nome;
	}
	
	public String getSexo ( ){
		return sexo;
	}
	
	public int getIdade ( )	{
		return idade;
	}
	
//VOCE PODE COLOCAR UM INTEIRO COMO PARAMETRO PARA RETORNAR O ANIMAL OU RETORNAR UM ANIMAL[] E NA SUA APLICACAO VOCE VE O QUE FAZ
	public Animal getAnimal(){
//	desta forma, menos ainda, sei como retornar as posições.	
		return animal[i];
			
	}
		
}

Acredito que o codigo deve ficar da seguinte forma:

[code]public class Individuo {
private String nome, sexo;
private int idade, i=0;

            //individuo pode ter n animais
private List<Animal> animais = new ArrayList<Animal>();

public Individuo ( ){
	nome="";
	sexo="";
	idade=0;
}

public void setNome (String snome){
	nome=snome;
}

public void setSexo (String ssexo){
	sexo=ssexo;
}

public void setIdade (int iidade){
	idade=iidade;
}

public void setAnimais (List<Animal> animais){
                     this.animais = animais;
            }

public List<Animal> getAnimais (){
                     return this.animais;
            }

public String getNome ( ){
	return nome;
}

public String getSexo ( ){
	return sexo;
}

public int getIdade ( )	{
	return idade;
}

}[/code]

E a classe Animal ficaria assim:

[code]public class Animal {
private String classe, nomeA, sexoA;

private Individio individuo;

public Animal (){   
    classe="";   
    nomeA="";   
    sexoA="";   
}   

public void setIndividuo (Individuo individuo){   
    this.individuo = individuo;   
}   
   
public Individuo getIndividuo (){   
    return this.individuo;
}   

   
public void setClasse (String sclasse){   
    classe=sclasse;   
}   
   
public void setNomeA (String snomea){   
    nomeA=snomea;   
}   
   
public void setSexoA (String ssexoa){   
    sexoA=ssexoa;   
}   
   
public String getClasse ( ){   
    return classe;   
}   
   
public String getNomeA ( ){   
    return nomeA;   
}   
   
public String getSexoA ( )  {   
    return sexoA;   
}   

}
[/code]

espero ter ajudado.

Cara, como deve ser exercício de faculdade e você não pode usar Collections você pode usar um “pseudo array dinâmico”… Mais ou menos assim:

	//Recebe um vetor e um valor, depois retorna um vetor com o valor inserido na última posição
	private static int[] arrayDinamico(int vetor[], int elem){
		int temp[] = new int[vetor.length+1];

		for(int i=0 ; i<vetor.length ; i++){
			temp[i] = vetor[i];
		}
		temp[temp.length-1] = elem;
		return temp;
	}

Eu usei esse artifício nos meus trabalhos de faculdade. Adapte para sua classe animal, assim você não precisa se preocupar com o tamanho do array, é só setar o tamanho dele como zero:

Animal[] vetor = new Animal[0]; //e quando quiser inserir vetor = arrayDinamico(vetor, novoAnimal);

Pessoal, muito obrigado pelas respostas e pela prontidão. Como disse, sou iniciante no assunto. Estou ainda um pouco verde para alguns comandos que vcs postaram. Vou fazer a implementação das soluções colocadas para ver como vai ficar. Qualquer coisa dou um novo grito. Se não for pedir muito, se pudessem dar um exemplo prático do programa executável, só para eu ver como exibo alguns animais de um indivíduo através destes metodos. Só pra entender a amarração indivíduo/animal na execução. Mas já tá de bom tamanho. Afinal, se a gente não apanhar um pouco, não aprende. rs

Valeu!!!

MEGA-APOSTILA, SUPER DEFINITIVA BLASTER!!!
eauehuaehuhae…
sério, nela você aprenderá os conceitos essenciais para programação em qualquer linguagem orientada a objetos…

Valeu Fernando, é por aí mesmo. rs

Tô fazendo uma facul a distância, e tá meio fraca. Os professores desaparecem. Vc tem que ficar esperando as respostas que são resumidas e rápidas. Complicado.

Já baixei a apostila e vou dar uma boa olhada.

Obrigado!