Coleções - Iterator

4 respostas
R

Opa, tenho um problema estou criando uma lista de alunos para inserir vários alunos, só que quando compilo o código abaixo não é exibido nada na tela.

import java.awt.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;


public class Aluno {
	private String nome;
	private int matricula;
	ArrayList<Aluno> alunos = new ArrayList<Aluno>();
	
	
	
	public Aluno(String nome, int matricula){
		this.nome = nome;
		this.matricula =matricula;
	
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public int getMatricula() {
		return matricula;
	}
	public void setMatricula(int matricula) {
		this.matricula = matricula;
		
	}
	public String toString(){
		return (""+nome+""+matricula+""+alunos);
	}
	public void inserir(Aluno a){
		Iterator<Aluno> i = alunos.iterator();
		while(i.hasNext()){
			alunos.add(a);
		
		}
		
	}
	
	
	public void exibir(){
		Iterator<Aluno> i = alunos.iterator();
		while(i.hasNext()){
			System.out.println(toString());
		}
		
	}
	
	
}

import java.util.Iterator;


public class MAin {
	public static void main(String[] args) {
	Aluno a1= new Aluno("robson",07);
	Aluno a2= new Aluno("Clara",02);
	a1.inserir(a1);
	a2.inserir(a2);
	a1.exibir();
	a2.exibir();
	
	}  
			
			


}

4 Respostas

ViniGodoy

O método inserir deveria ser assim:

public void inserir(Aluno a){ alunos.add(a); }

O iterator serve para percorrer uma lista. No seu caso, como a lista estava vazia na primeira chamada, o código nunca entraria naquele while. Não existe mesmo a necessidade de percorrer a lista para inserir um elemento dentro dela.

A linha 49 deveria ser:

System.out.println(i.next().toString());

O comando next() retorna o próximo aluno do iterator. E o toString() deve ser chamado nesse aluno.

fredericoengels

Olá Robson, tudo bem?

Dei uma olhada rápida no seu código e de cara já identifiquei um erro:

System.out.println(toString());

O método toString() retorna uma String, no seu caso você já implementou o método na sua classe ALUNO.

Então basta fazer: System.out.println(i);
onde i representa um aluno :d

Outra coisa, não seria mais interessante você criar uma classe a parte para inserir e exibir os alunos não?

fredericoengels

ops, realmente me esqueci desse detalhe…
ele está percorrendo uma lista

Faça como o ViniGodoy disse que vai da certo

R

Fiz o que viniGodoy falou, mas mesmo assim não da certo...

public void inserir(Aluno a){
		alunos.add(a);
		
		
		
		}
		
	
	
	
		public void exibir(){  
	        Iterator<Aluno> i = alunos.iterator();  
	        while(i.hasNext()){  
	            System.out.println(i.next().toString());  
	        }  
			
		}
		
	}

o resultado é o seeguinte:

at java.lang.StringBuilder.append(Unknown Source)
at Aluno.toString(Aluno.java:33)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)

Criado 5 de junho de 2011
Ultima resposta 5 de jun. de 2011
Respostas 4
Participantes 3