Array como atributo

Boa noite, sou iniciante em Java e estou tendo problemas no entendimento de array como atributo, no código abaixo foi criado um array listadeanimais como atributo que é do tipo objeto Animal, no momento de dar um new no array ele está preenchido com o atributo capacidade no construtor da classe e no método adicionarAnimal ele já está com o atributo quantidade de animais :shock: . Não entendo o porque da mudança de atributo dentro do array e como isso funciona.

[code]public class PetShop{

private String endereco;
private String gerente;
private Animal[] listaAnimais;
private int capacidade;
private int quantidadeAnimais;

public PetShop(String endereco, String gerente, int capacidade){
	this.endereco = endereco;
	this.gerente = gerente;
	this.listaAnimais = [b]new Animal[capacidade];[/b]
	this.capacidade = capacidade;
	this.quantidadeAnimais = 0;
}

public void adicionarAnimal(Animal a){
	if(this.quantidadeAnimais == this.capacidade){
		System.out.println("Casa cheia.");
		
	} else{
		[b]this.listaAnimais[this.quantidadeAnimais][/b] = a;
		this.quantidadeAnimais++;
	}
}

}
[/code]

Ao criar um PetShop, já é determinado qual a quantidade máxima de animais que podem ser internados. O método adicionarAnimal verifica isso e emite um aviso de “Casa cheia”, caso o limite de animais já tenha sido alcançado. Perceba que, antes de usar um array, você tem sempre que determinar o tamanho dele. Por isso está presente no construtor essa configuração de tamanho.

Se não ficou claro, avisa.

Abraço.

[quote=TerraSkilll]Ao criar um PetShop, já é determinado qual a quantidade máxima de animais que podem ser internados. O método adicionarAnimal verifica isso e emite um aviso de “Casa cheia”, caso o limite de animais já tenha sido alcançado. Perceba que, antes de usar um array, você tem sempre que determinar o tamanho dele. Por isso está presente no construtor essa configuração de tamanho.

Se não ficou claro, avisa.

Abraço.[/quote]

Enquanto a determinação do array tudo tranquilo, mas a o problema que estou tendo é com relação ao atributo listaanimais que recebe como tamanho o atributo capacidade no construtor e depois no método adicionaranimal ele recebe como tamanho o atributo quantidadeAnimais, não entendo como um único array pode ter mais de um atributo como tamanho.

Um é a quantidade de elementos que o array pode conter. O outro é a posição onde vai guardar no array.

Creio que seja isso.

[quote=els1234]Um é a quantidade de elementos que o array pode conter. O outro é a posição onde vai guardar no array.

Creio que seja isso.[/quote]
É isso mesmo, o atributo capacidade é utilizado para definir o tamanho do array, agora o atributo quantidadeAnimais (Que pode ter te confundido pelo nome) simplesmente define em qual índice do array está sendo atribuído o Animal.

[quote=els1234]Um é a quantidade de elementos que o array pode conter. O outro é a posição onde vai guardar no array.

Creio que seja isso.[/quote]

Analisando o código acredito que é isso mesmo els1234, mas colocando em prática fica confuso, por exemplo: digamos que o usuário criou um novo objeto Petshop e definiu como parâmetro de capacidade o valor inteiro 10, foi criado um array com capacidade de 10 posições, até aí tudo bem mas ao adicionar um animal ele adiciona na posição quantidade deanimais que posição seria essa já que o vetor criado foi de 10 posições?

O vetor não é expansível dinamicamente… para isso java tem os objetos que derivam de collections…

No seu caso… quando a pessoa adiciona um novo animal… ele verifica se a variável quantidadeAnimais é igual a capacidade… se for… é poruqe lotou…

Se não for ele entra no if, seta o valor no vetor na posição corrente e incrementa…

No vetor em java… a posição começa do 0 … então… se ele por exemplo criar um vetor de 10 posições… vc vai poder usar de 0 à 9 posições