[quote=paulogomes.tec]Eu já fiz o que vocês me sugeriram, eu usei o ArreyList e deu certo, eu consigo listar os alunos cadastrados e tudo, mas se eu quiser acessar um objeto da lista para relizar alguma operação, tipo enviar o um objeto aluno do Array como parametro para algum metodo de uma classe como eu faço para apontar o objeto?
Eu ainda não vou dar o tópico como resolvido, eu ainda vou continuar ficar fazendo alguns testes. Para os mais experientes algumas coisas podem ser simples, mas para mim que estou tentando aprender sozinho pode ser complicado. Por isso eu agradeço a paciencia e a ajuda de todos vocês.
Abraço…[/quote]
A classe ArrayList tem métodos que vc usa para obter certo elemento. O primeiro é o método get, se vc ja souber em qual índice está o elemento!
[code]
public class Main
{
public static void main(String[] args)
{
List lista = new ArrayList();
lista.add(new Pessoa("a"));
lista.add(new Pessoa("b"));
lista.add(new Pessoa("c"));
lista.add(new Pessoa("d"));
//lembrando que índices começam a ser contados de zero. Logo, vc obterá o segundo elemento
// na linha abaixo.
System.out.println(lista.get(1).getNome());
}
}
class Pessoa{
private String nome;
public Pessoa(String nome){
this.setNome(nome);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}[/code]
Se vc nao sabe o índice do elemento, use o método indexOf … PORÉM olhe esse exemplo…
[code]public class Main
{
public static void main(String[] args)
{
List lista = new ArrayList();
lista.add(new Pessoa("a"));
lista.add(new Pessoa("b"));
lista.add(new Pessoa("c"));
lista.add(new Pessoa("d"));
//lembrando que índices começam a ser contados de zero. Logo, vc obterá o segundo elemento
// na linha abaixo.
System.out.println(lista.indexOf(new Pessoa("a"))); //Escreverá -1
}
}
class Pessoa{
private String nome;
public Pessoa(String nome){
this.setNome(nome);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}[/code]
O índice será -1 porque ele está comparando memória e os dois objetos (apesar de terem o mesmo nome) estão em espaços de memória diferentes. Para resolver esse problema, vc deve sobreescrever o método equals da classe Object.
Se vc usa Eclipse, ele faz isso automaticamente para vc… Vá ate a classe Pessoa e clique em Source => Generate hashCode() and equals()… selecione os campos que você deseja que sejam levados em conta para fazer o equals e de ok.
O meu ficou algo dessa maneira:
[code]public class Main
{
public static void main(String[] args)
{
List lista = new ArrayList();
lista.add(new Pessoa("a"));
lista.add(new Pessoa("b"));
lista.add(new Pessoa("c"));
lista.add(new Pessoa("d"));
//lembrando que índices começam a ser contados de zero. Logo, vc obterá o segundo elemento
// na linha abaixo.
System.out.println(lista.indexOf(new Pessoa("a"))); //Escreverá -1
}
}
class Pessoa{
private String nome;
public Pessoa(String nome){
this.setNome(nome);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Pessoa other = (Pessoa) obj;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
return true;
}
}[/code]
Se vc rodar agora aparecerá o índice “0”, o que está correto, uma vez que a pessoa de nome “a” é a primeira da lista.
E, finalmente, se vc quer fazer um método que obtenha uma pessoa… pode fazer assim:
[code]public class Main
{
static List lista = new ArrayList();
public static void main(String[] args)
{
lista.add(new Pessoa(“a”));
lista.add(new Pessoa(“b”));
lista.add(new Pessoa(“c”));
lista.add(new Pessoa(“d”));
//lembrando que índices começam a ser contados de zero. Logo, vc obterá o segundo elemento
// na linha abaixo.
System.out.println(obterPessoa(new Pessoa("c")).getNome());
}
public static Pessoa obterPessoa(Pessoa p){
if (p == null){
return null;
}
int index = lista.indexOf(p);
if (index < 0){
return null;
}
return lista.get(index);
}
}
class Pessoa{
private String nome;
public Pessoa(String nome){
this.setNome(nome);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Pessoa other = (Pessoa) obj;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
return true;
}
}[/code]
OBS: Não leve em conta encapsulamento nem acoplamento no meu código hehehe
ok?