Olá pessoal.
Nas duas últimas semanas tirei um tempo para “rever” algumas coisas básicas de java, já que tenho me dedicado um pouco mais em Ruby e Rails.
Estou estudando a apostila da Caelum CS 14, ótima por sinal.
Minha dúvida é digamos bem burrinha mesmo (Não tenho vergonha de dizer isso :—) ).
Quando vou imprimir a lista de alunos, não printa os nomes e sim o endereço/referência do objeto, conforme abaixo:
Espaço atual utilizado: 1 - Tamanho total disponível: 100
Metódo testaAdicionaNoFim - br.com.caelum.ed.Vetor@1172e08
Fontes:
Classe de testes
/*
* Teste ADICIONA NO FIM
*/
private void testaAdicionaNoFim(){
Aluno a1 = new Aluno();
Aluno a2 = new Aluno();
a1.setNome("Rafael");
a2.setNome("Paulo");
Vetor lista = new Vetor();
lista.adiciona(a1);
lista.adiciona(a2);
System.out.println("Metódo testaAdicionaNoFim - " + lista);
Classe Vetor
[code]package br.com.caelum.ed;
public class Vetor {
private int totalDeAlunos = 0;
private Aluno[] alunos = new Aluno[100];
/*
* Metódo adiciona.
* Aqui o consumo de tempo é CONSTANTE (Melhor desempenho - o tempo de processamento será sempre o mesmo)
*/
public void adiciona(Aluno aluno){
//Verifica primeiro se o array atual tem espaço disponível
this.garantaEspaco();
this.alunos[this.totalDeAlunos] = aluno;
this.totalDeAlunos++;
}
/*
* Adiciona um aluno no array, verificando se a posição é válida, se a posição já existir
* é preciso mover todos os elementos para a direita e sim inserir o dado na posição liberada
*/
public void adiciona(int posicao, Aluno aluno){
//Verifica primeiro se o array atual tem espaço disponível
this.garantaEspaco();
if(!this.posicaoValida(posicao)){
throw new IllegalArgumentException("Posição Inválida!");
}
for(int i=this.totalDeAlunos-1; i >= posicao; i--){
this.alunos[i + 1] = this.alunos[i];
}
this.alunos[posicao] = aluno;
this.totalDeAlunos++;
}
/*
* Retorna o aluno no array da posição especificada
*/
public Aluno pega(int posicao){
if(!this.posicaoOcupada(posicao)){
throw new IllegalArgumentException("Posição Inválida!");
}
return this.alunos[posicao];
}
/*
* Remove o aluno no array da posição espeficada e reorganiza o array
* movendo os elementos para a esquerda, reordenando o array novamente
*/
public void remove(int posicao){
if(!(this.posicaoOcupada(posicao))){
throw new IllegalArgumentException("Posição Inválida!");
}
for(int i=posicao; i < this.totalDeAlunos -1; i++){
this.alunos[i] = this.alunos[i + 1];
}
this.totalDeAlunos--;
}
/*
* Valida se a posição esta ocupada
* Realiza a validação com o seguinte crieterio:
* Se a posição estiver entre 0 e a PENULTIMA posição preenchida no array, retorna true, senão retorna false
*/
private boolean posicaoOcupada(int posicao){
return posicao >=0 && posicao < this.totalDeAlunos;
}
/*
* Valida se a posição é válida
* Realiza a validação com o seguinte criterio:
* Se posicao estiver entre 0 e a ÚLTIMA posição preenchida no array, retorna true, senão retorna false
*/
private boolean posicaoValida(int posicao){
return posicao >=0 && posicao <= this.totalDeAlunos;
}
/*
* Metódo contem, aqui a comparação é via equals, ou seja,
* comparando referência de objetos, que é o correto aqui nesse caso
*/
public boolean contem(Aluno aluno){
for(int i=0; i < this.totalDeAlunos; i++){
if(aluno.equals(this.alunos[i])){
return true;
}
}
return false;
}
/*
* Return of lenght the list
*/
public int tamanho(){
return this.totalDeAlunos;
}
/*
* Sobrescrevendo o metódo toString()
* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString(){
if(this.totalDeAlunos == 0){
return "[]";
}
StringBuilder builder = new StringBuilder();
builder.append("[");
for(int i=0; i < this.totalDeAlunos -1; i++){
builder.append(this.alunos[i]);
builder.append(", ");
}
builder.append(this.alunos[this.totalDeAlunos -1]);
builder.append("]");
return super.toString();
}
/*
* Verifica se o espaço do Array inicial estorou,
* se sim, cria uma nova array com tamanho duas vezes maior,
* realiza a cópia dos dados e depois realoca novamente no original com o tamanho alterado (t.o * 2)
* {ALOCAÇÃO DINÂMICA}
*/
private void garantaEspaco(){
if(this.totalDeAlunos == this.alunos.length){
Aluno[] novaArray = new Aluno[this.alunos.length * 2];
for(int i=0; i < alunos.length; i++){
novaArray[i] = this.alunos[i];
}
this.alunos = novaArray;
}else{
System.out.println("Espaço atual utilizado: " + this.totalDeAlunos + " - Tamanho total disponível: " + this.alunos.length);
}
}
}
[/code]
Classe Aluno
[code]package br.com.caelum.ed;
public class Aluno {
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String toString(){
return this.nome;
}
public boolean equals(Object object){
Aluno outro = (Aluno) object;
return this.nome.equals(outro.nome);
}
}
[/code]
Agradeço a “força”.
Abs e obrigado!!!