Ajuda com classe de teste em Java

6 respostas
P

Pessoal alguem que entenda, eu ja quebrei a cabeça e nao consigo descobrir o erro, essa classe de teste nao está imprimindo nada no console quando boto pra rodar, teria algo errado ai?

package Teste;

import java.util.Iterator;

import voluntariado.ProgramaVoluntariado;
import voluntariado.Voluntario;

public class Teste {

public static void main(String[] args) {

ProgramaVoluntariado prog = new ProgramaVoluntariado(“Luta Contra a Dengue”);

Voluntario v = new Voluntario (“Ziraldo”);
prog.inscrever(v);

v = new Voluntario(“Dario”);
prog.inscrever(v);

v = new Voluntario (“Amarildo”);
prog.inscrever(v);

Iterator itVoluntarios = prog.getVoluntarios();

while(itVoluntarios.hasNext()){

v = itVoluntarios.next();

System.out.println(v.getName());

}

}

}

6 Respostas

D

poste os códigos das classes abaixo, pode ser algum problema nelas.

voluntariado.ProgramaVoluntariado;
voluntariado.Voluntario;

P

Vlw por ajudar amigo segue as classes

package voluntariado;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import ordenacao.Elemento;
import ordenacao.Ordenador;

public class ProgramaVoluntariado {

private String name;
private List<Voluntario> voluntarios;

public ProgramaVoluntariado(String name){
	this.name=name;
	this.voluntarios = new ArrayList<Voluntario>();
	
}

public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}

public void inscrever (Voluntario v){
	if (!this.voluntarios.contains(v)){
		this.voluntarios.add(v);
	}
}

public void desinscrever(Voluntario v){
	this.voluntarios.remove(v);
}

public Iterator<Voluntario> getVoluntarios(){
	
	List<Elemento> listaElementos = new ArrayList<Elemento>();
	
	Iterator<Voluntario> itVoluntarios = this.voluntarios.iterator();
	while(itVoluntarios.hasNext()){
		listaElementos.add(new VoluntarioAdapter(itVoluntarios.next()));
	}
	
	Ordenador ordenador = new Ordenador();
	Iterator<Elemento> itElementos = ordenador.ordenar(listaElementos.iterator());
	
	List<Voluntario> listaResultado = new ArrayList<Voluntario>();
	while(itElementos.hasNext()){
		
	}
	
	VoluntarioAdapter adapter = (VoluntarioAdapter) itElementos.next();
	listaResultado.add(adapter.getVoluntario());


return listaResultado.iterator();
}

}

package voluntariado;

public class Voluntario {
private String name;

public Voluntario(String name){ 
	this.name=name;
}


public String getName() {
	return name;
}


public void setName(String name) {
	this.name = name;
}

}

D

não pude compilar o código aqui, por causa dos objetos Ordendor e Elemento, mas me pareceu estranho este trecho de código

final List<Voluntario> listaResultado = new ArrayList<Voluntario>();
        while(itElementos.hasNext()){

        }

não falta alguma coisa ai?

é algo neste trecho, por que se colocar para retornar o iterador diretamente no getVoluntarios() funciona, é necessário você fazer todas aquelas conversões para ordernar a lista de voluntários, qual a sua necessidade de ordenação? talvez implementando um Comparable na classe Voluntário resolva, e você pode utilizar for aprimorado ao invés de Iterators

for (final Voluntario vol: prog.getVoluntarios()) {
            System.out.println(vol.getName());
        }
public List<Voluntario> getVoluntarios(){

        //        final List<Elemento> listaElementos = new ArrayList<Elemento>();
        //
        //        final Iterator<Voluntario> itVoluntarios = this.voluntarios.iterator();
        //        while(itVoluntarios.hasNext()){
        //            listaElementos.add(new VoluntarioAdapter(itVoluntarios.next()));
        //        }
        //
        //        final Ordenador ordenador = new Ordenador();
        //        final Iterator<Elemento> itElementos = ordenador.ordenar(listaElementos.iterator());
        //
        //        final List<Voluntario> listaResultado = new ArrayList<Voluntario>();
        //        while(itElementos.hasNext()){
        //
        //        }
        //
        //        final VoluntarioAdapter adapter = (VoluntarioAdapter) itElementos.next();
        //        listaResultado.add(adapter.getVoluntario());


        return voluntarios;
    }
P

O código ta compilando aqui sem erro nenhum, minha necessidade de ordenação é por ordem alfabetica.

D

sim, aqui não compila por que nao saiba da existencia destas dependências de outros objetos que vc criou, para eu poder ver, terá que me passar também estas classes, mas a ordenação você deve fazer assim, sua classe voluntário ficaria assim:

public class Voluntario implements Comparable<Voluntario> {
    private String name;


    public Voluntario(final String name){
        this.name=name;
    }


    public String getName() {
        return name;
    }


    public void setName(final String name) {
        this.name = name;
    }


    @Override
    public int compareTo(final Voluntario o) {
        return this.name.compareTo(o.getName());
    }

}

para testar (lembrando vc pode retornar a lista ordenada no get)

final ArrayList<Voluntario> voluntarios = (ArrayList<Voluntario>) prog.getVoluntarios();
        Collections.sort(voluntarios);
        for (final Voluntario vol: voluntarios) {
            System.out.println(vol.getName());
        }
P

Problema que eu nao posso alterar o codigo por causa do diagrama (é um trabalho de faculdade) , segue as outras classes

package voluntariado;

import ordenacao.Elemento;

public class VoluntarioAdapter implements Elemento {
	
	private Voluntario voluntario;
	
	public VoluntarioAdapter(Voluntario v){
		this.voluntario = v;
	}
	
	public Voluntario getVoluntario(){
		return this.voluntario;
	}

	@Override
	public int comparar(Elemento outro) {
		VoluntarioAdapter outroAdapter = (VoluntarioAdapter) outro; //superclasse para subclasse tem que fazer typecast
		
		return this.voluntario.getName().compareTo(outroAdapter.getVoluntario().getName());
	}

}
package ordenacao;

public interface Elemento {
	public int comparar(Elemento outro);

}
package ordenacao;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Ordenador {
	public Iterator<Elemento> ordenar(Iterator<Elemento> elementos){
	
		List<Elemento> lista = new ArrayList<Elemento>();
		
		while(elementos.hasNext());
			lista.add(elementos.next());
			
			Elemento[] vetor = new Elemento[lista.size()];
			vetor = lista.toArray(vetor);
			
			int total = lista.size();
			
			for (int i = 0; i < total-1; i++){
				int menor = i;
				for (int j = i+1; j< total; j++)
					if (vetor[j].comparar(vetor[menor]) < 0)
						menor = j;
				
				Elemento temp = vetor [i];
				vetor[i] = vetor [menor];
				vetor[menor] = temp;
			}
			
			lista = Arrays.asList(vetor);
			
			return lista.iterator();
		}

	}
Criado 5 de abril de 2013
Ultima resposta 5 de abr. de 2013
Respostas 6
Participantes 2