Como criar várias Instâncias automaticamente?

9 respostas
E

Olá pessoal.
Gostaria de saber como posso instânciar minhas classes de maneira automatica criando várias instâncias para ela.
Como se fosse um array.
Desde já agradeço.

//Instânciando a classe 'Cliente' cliente[] c=new cliente[30]; for (int i2=0;i<30;i++){ c[i2]=new cliente(); } //

Eu tentei fazer assim, só que quando vou executar dá erro. :frowning:

9 Respostas

rmendes08

No comentário você diz que o nome da classe é ‘Cliente’, mas no código você usa ‘cliente’. Pode ser que você esteja usando o nome da classe errada, porque à primeira vista tá tudo certo. Posta a mensagem de erro, que ajuda bastante.

B

Troque i2 por i.

Lavieri

complementando o que bruno falou…

no seu for… vc diz

for(int [color=red]i2[/color] = 0; [color=green]i[/color] < 30; [color=green]i[/color]++)

num ligar vc escreve i2, e em outro escreve i …

escolha o q quer

E

Opa!
Realmente pessoal meu for tava errado. Modifiquei ele, e a primeira vista está tudo certo.
Só que o meu professor disse que fazer isso é “loucura”, que existe uma forma melhor de se fazer. Só que ele não quis me ensinar, pois ainda estou pegando os conceitos de OO. Alguém sabe qual seria essa função?

T

O fato é que o correto normalmente nunca é usar arrays (normalmente arrays são ensinados primeiro, só para deixar os alunos malucos; eu considero que na prática é melhor não usar arrays) nem deixar já criados um monte de objetos.

Se você tem um Cliente[] com 30 posições não quer dizer que você tenha de criar sempre, e obrigatoriamente, 30 Clientes. Deixe as posições não-usadas sem atribuir (o valor que elas assumem é “null”) mas antes de usar qualquer posição você precisa conferir se é null ou não.

Na prática, você usa uma List<Cliente> e vai criando os objetos à medida que vai precisando deles.

fmad27

Exemplo de List:

Cliente c1 = new Cliente();
Cliente c2 = new Cliente();
Cliente c3 = new Cliente();

ArrayList <Cliente> lista = new ArrayList<Cliente>();

lista.add(c1);
lista.add(c2);
lista.add(c3);
E

Me expliquem melhor como isso ira funcionar. Se eu quiser acessar uma variável, atraves de uma pesquisa? Tipo um CPF que está dentro de alguma instância q eu criei de cliente. Como farei?

T

Hum… se você quer fazer uma pesquisa na verdade a estrutura de dados a usar seria uma outra, que é um Map.
Mas como você ainda está aprendendo arrays, não vou complicar muito sua cabeça.

A primeira coisa a aprender é: não é porque um array tem 30 posições que você tem de preenchê-las todas logo de cara.
A segunda coisa é: Como algumas posições podem estar vazias, você tem de ver se elas estão vazias antes de usá-las.
A terceira coisa é: depois que você aprender direitinho arrays, tente não usá-los, porque você tem de ficar testando para ver se está vazio e isso é um pé no saco.

Para testar se uma posição está vazia, teste contra null. Uma coisa interessante no Java é que, quando você cria um array de 30 posições, ele preenche o array com vazios. Por exemplo:

Cliente [] clientes = new Cliente[30];

Isso criou um array com 30 posições (de 0 até 29), só que todas preenchidas com o valor null (que representa um vazio).
Na hora de você usar a posição 8, por exemplo, você tem de verificar primeiro se ela está preenchida. Um exemplo completo:

if (clientes[8] == null) {
    /// A posição está vazia. Vamos preencher com um novo cliente.
    clientes[8] = new Cliente ("João", 23);
} else {
    /// Vou chamar o método "getNome" da classe Cliente.
    System.out.println (clientes[8].getNome());
}
T

E para fazer uma pesquisa, faça algo como:

String cpfProcurado = "[CPF removido]";
Cliente clienteAchado = null;
for (int i = 0; i < clientes.length; ++i) {
   if (clientes[i] != null) {
       if (cpfProcurado.equals (clientes[i].getCPF()) {
           clienteAchado = clientes[i];
           break;
       }
   }
}
if (clienteAchado != null) {
    System.out.println ("O cliente foi encontrado. Seu nome é " + clienteAchado.getNome());
} else {
    System.out.println ("Não achei o cliente. Sinto muito.");
}
Criado 5 de abril de 2009
Ultima resposta 9 de abr. de 2009
Respostas 9
Participantes 6