Eae pessoal, estou com um problema.
É o seguinte:
Tenho uma classe cujo um atributo privado dela é um array.
public class Turma
{
private int codigoTurma;
private Aluno alunos[];
private int numDeAlunos;
private Professor professor;
essa classe tem um método que vai colocando alunos nesse nesse array.
[code] public boolean inscreveAluno(Aluno aluno1)
{
boolean provisoria = false;
for(int i = 0; i < alunos.length; i++)
{
if(alunos[i] == null)
{
alunos[i] = aluno1;
provisoria = true;
numDeAlunos++;
break;
}
else provisoria = false;
}
return provisoria;
} [/code]
Então, quando estou em outra classe trabalhando, o único jeito de acessar esse array “privado” é com o método obtemAluno() que retorna o array.
Mas então fica a pergunta.
Existe como zerar (fazer com que todos os índices fiquem apontando para null) atráves dessa outra classe dessa outra classe?
Ou terei que implementar um método nessa que tem o atributo do tipo array privado que faça isso.
Bom você pode fazer um acesso via Reflection, mas o mais aconselhável é criar um método que “zere” este array pra você.
Se precisar de exemplo de como fazer um destes dois jeitos, é só responder neste tópico, fora isso espero ter ajudado
Existe um método utilitário para fazer isso.
Arrays.fill( alunos, null);
Por que você não usa ArrayList?
public class Turma
{
private int codigoTurma;
private ArrayList<Aluno> alunos;
private int numDeAlunos;
private Professor professor;
public boolean inscreveAluno(Aluno aluno1)
{
if(numDeAlunos < limite) {
alunos.add(Aluno);
numDeAlunos++;
return true;
}
return false;
}
public List<Aluno> obtemAlunos(){
return alunos;
}
Para zerar a lista de alunos é só chamar obtemAlunos().clear();
[quote=Guilherme Moreira]Bom você pode fazer um acesso via Reflection, mas o mais aconselhável é criar um método que “zere” este array pra você.
Se precisar de exemplo de como fazer um destes dois jeitos, é só responder neste tópico, fora isso espero ter ajudado
[/quote]
Amigo, não conheço Reflection, e também ainda não consegui pensar em um algoritmo para fazer isso. Por isso se quiser postar pra eu adquirir esse conhecimento, eu ficaria grato.
[quote=sergiotaborda]Existe um método utilitário para fazer isso.
Arrays.fill( alunos, null);
[/quote]
Muito bom, obrigado Sergio. 
Vou testar logo.
Java Player, ainda não tive contato com lists ainda, infelizmente. Mas vou dar uma pesquisada.
Obrigado pela atenção de vcs. 
Amigo, Reflection é um recurso MARAVILHOSO (na minha opinião é claro!). Mas [color=red]CUIDADO!!![/color] Ele consome MUITO recurso e por isso veja bem onde REALMENTE É NECESSÁRIO ser usado este recurso.
No seu caso eu acho que vc não deve usá-lo, sinceramente.
Quanto aos lists, trabalhar com lists é muito bom! Muito simples, facilita bastante na adição e remoção de itens e tudo o mais. Porém, se comparado com um array simples como o que vc já está usando, os lists tb consomem mais recurso. (Nada comparado ao Reflection com certeza, mas consomem mais que um array simples, é o recurso chamado Collections)
Enfim, quando desenvolvemos temos que pensar não só no que nos é prático no momento, mas tb no que vai deixar nossa aplicação com mais performace para ser prático ao futuro usuário.
Busque aqui no GUJ sobre Reflection e sobre ArrayList que vc vai aprender mais com certeza! 
PEssoal, qual é a diferença(ou vantagem de se usar o ArrayList ao ivnes do array tradicional???
o que significa essa sintaxe ArrayList aluno ??? ja vi sintaxe assim nome_da_classe<Integer,String> x…
alguem me explica essa sintaxe e quando e onde devemos usar dessa forma???
Um ArrayList é um objeto que implementa a interface java.util.List e se comporta, para várias coisas, como se fosse um array que tem a propriedade de poder ser aumentado ou diminuído de tamanho. (Arrays em Java são de tamanho fixo).
Como um ArrayList usa internamente um array, e como o compilador do Java faz algumas mágicas, então é quase tão eficiente usar um ArrayList quanto um array normal para a maior parte das aplicações.
Um inconveniente do ArrayList é que você não pode usá-lo para conter tipos primitivos (como “int” ou “double”), apenas para objetos (como “String” ou “java.lang.Double”). Portanto acho um pouco difícil que você use ArrayList para fazer cálculo numérico, como soluções de sistemas de equações de N variáveis; mas para a maior parte dos casos é melhor usar ArrayList em vez de arrays.
List < Aluno > alunos = new ArrayList < Aluno > ();
seria mais ou menos equivalente a:
Aluno[] alunos = new Aluno[0];
(quando você cria um ArrayList ele vem vazio no começo). Se quiser pôr mais elementos, você pode usar "add" para ir adicionando os elementos.
thingol eu posso não ter um tipo primitivo com int ou double mas não posso gravar um Integer ou Double?
e sobre o <>
quando você declara numa ArrayList você ta dizendo que você vai colocar Objects do tipo Integer e aí não seria mais necessário o cast na hora de pegar o valor pois já foi declarado como uma lista dele
um Exemplo:
ArrayList alunos1 = new ArrayList();
ArrayList<Aluno> alunos2 = new ArrayList<Alunos>();
Aluno a = new Aluno();
alunos1.add(a);
alunos2.add(a);
//pra obter o Aluno devolta
Aluno b = (Aluno) alunos1.get(0);
Aluno c = alunos2.get(0);
Sei que tem mais utilidade mais essa é uma delas
E eu esqueçi mais acho que isso se chama Generics
correto? Por favor, se errado me falem o correto^^
[quote=Mark_Ameba]e sobre o <>
quando você declara numa ArrayList você ta dizendo que você vai colocar Objects do tipo Integer e aí não seria mais necessário o cast na hora de pegar o valor pois já foi declarado como uma lista dele
um Exemplo:
ArrayList alunos1 = new ArrayList();
ArrayList<Aluno> alunos2 = new ArrayList<Alunos>();
Aluno a = new Aluno();
alunos1.add(a);
alunos2.add(a);
//pra obter o Aluno devolta
Aluno b = (Aluno) alunos1.get(0);
Aluno c = alunos2.get(0);
Sei que tem mais utilidade mais essa é uma delas
E eu esqueçi mais acho que isso se chama Generics
correto? Por favor, se errado me falem o correto^^[/quote]
opa, acho que entendi.
Vamos ver se entendi mesmo.
Entao essa classe ArrayList é uma classe que cria um Array mas digamos, dinamico? ele cria com tamanho ZERO, e conforme formos adicionando atraves do metodo .add ele vai aumentando o tamanho do Array? se for assim, ele ja vai colocando no proxumo?
por exemplo, num array normal, qdo tamos dentro do FOR, temos que incrementar uma variavel i qualquer(i++) onde o proximo resultado do i é o indice do array.
nesse Array list, sendo aluno um array list, entao aluno.add(a) e aluno.add(b), ele automaticamente vai colocando no proximo espaço?
e pra retornar, eu retorno usando a posição como no array normal mas atraves do metodo get?
se for isso, achei otimo.
entao vai uma outra pergunta sobre o operador <>.
Quais classes podemos usar o <> ? qualquer uma? ou soemtne o arraylist? ou somente algumas especificas? caso seja algumas, quais seriam elas?
e como eu implemento uma classe que permita aceitar esse operador <>???
Boa tarde pessoal, acho que a conversa tomou outro rumo :).
A pergunta do Cassio.evalt era [quote]Existe como zerar (fazer com que todos os índices fiquem apontando para null) atráves dessa outra classe dessa outra classe?
[/quote]
Me corrijam sse u estiver errado, mas quando o método obtemAluno() é chamado, ele retorna uma cópia do Array e não o Array em si. Por este motivo não é possível remover os itens do array original. Estou correto?
Acredito que isto poderia ser realizado de algumas maneiras:
- ter um outro método na classe dona do Array para apagar o seu conteúdo, como foi dito pelo sergiotaborda (na minha opnião seria o mais apropriado);
- colocar o array dentro de uma outra classe e o método obtemAlune() passar a retornar esta outra classe, assim seria retornada uma cópia da nova classe que conteria a referencia para o Array de alunos (funcionaria da mesma maneira que um ArrayList) ;
- utilizar um ArrayList, vide item anterior
- tornar público o Array de alunos :?
Mas nós indicamos o uso de List e ele quer aprender seria legal ensina^^
Ah ArrayList tem varios metodos uteis você também pode usar o addLast(Object arg0) pra adiciona na ultima posição o getFist e getLast pra pega o primeiro ou o ultimo objeto da lista respectivamente
e pra retorna o tamanho você não usa mais o .lenght
e sim .size() que te retorna tamanho o .contains(Object arg0); te retorna true se o objeto procurado existir(mas pra esse caso indico o HashSet() que é bem mais rapido com esse método)
e se voce olhar a API vc vai encontrar mais coisas
Ai viajou… Quem tem esses métodos é LinkedList e não ArrayList.
Voltando ao assunto:
As coleções devem ser usadas sempre. Em casos especiais em que os itens não se alteram pode usar array , ou em casos especialissimos como JComponent.getComponents().
ArrayList não cria um array. Se alguém afirmar isso estará violando o encapsualmento. Ele apenas se comporta como um array. (Porque contém um array …
).
Iterar uma lista ou qq coleção é muito simples
[code]List alunos = …
for (Aluno aluno : alunos){
// faz algo com aluno
}[/code]
Realmente, me confundi com as lists=/
Mas a minha ultima postagem está coerente???
e sobre criar classes que podem ser usadas <>?
Sim é isso msm a cada add você coloca na proxima posição da ArrayList
Não sei muito bem quais classes tem o <> , mas as classes List e Collection pode usar.