Algoritmo

oi para acabar o meu programa de uma biblioteca só me falta um metodo e tava tentando encontar um algoritmo para isso mas não tou a conseguir…
o problema é o seguinte:

o que o metodo é suposto fazer é listar os o curso dos alunos que mais requesitam na biblioteca, e o meu problema é achar por exemplo os 5 que mais requisitam pois achar o que mais requisita é facil ora os 5…

para ficar um problema mais facil(dado que só preciso da maneira como calcular), imaginem que é uma lista de de 20 numeros e quero achar os 5 mais altos…

Obrigado e postem aí qlq coisa

-TUGA-

Ola,

Bom, acho que se vc juntar umas coisas que já deve saber vc consegue… vamos por passos:

1-> calcule quanto cada aluno usou a biblioteca.
2-> ordene por este resultado.
3-> extraia os 5 primeiros…

E pronto.

pois isso eu cheguei lá mas como eu faço para ordenar??

Ola,

Po, ae depende como vc esta guardando isto… se for array vc pode usar a classe utilitaria Arrays, se for um Collection, vc pode usar a classe Collections… mas se isto estiver vindo do banco… tem como fazer no banco :wink:

então é assim:

eu tenho os utentes num hashmap que podem ser alunos, docentes ou externos cada um com carateristicas diferentes, e o que eu queria era ordenar os alunos que mais obras requisitadas tivessem, por isso ia ficar tipo deste modo:

   public ArrayList<String> listaCursos(){

   Utente x;
   ArrayList<String> lista = newArrayList();
   for(Iterator it = utentes.values().iterator(); it.hasNext();) {
           item = (Utente) it.next();
           if(x instanceof Aluno)      // se é do tipo aluno
          int y = ((Aluno)x).getRequisicoes().size());// quantas consultas fizeram(é um Arraylist)
           

          ****agora era a ordenaçãoe de acordo com a ordenação
punha os cursos num arraylist e faria o return da lista com os cursos....

                

deve haver uma maneira mais simples tipo um sort ou assim mas não encontrei nada…

postem aí qualquer coisa

-TUGA-

Ola,

Entao, a classe Collections tem o sort, mas para collections… vc pode fazer assim:

Collection<Utente> utentes = utentes.values(); utentes = java.util.Collections.sort(utentes, new Comparator<Utente>(){ public int compare(Utente u1, Utente u2){ if(u1.getRequisicoes().size() > u2.getRequisicoes().size()){ return 1; }else if(u1.getRequisicoes().size() < u2.getRequisicoes().size()){ return -1; } return 0; } }); //aqui vc faz o iterator... e bla bla bla....

se entendi o seu codigo ele me devolve a comparação entre dois utentes só não é??o que eu procurava era que a collection ordenasse com base no size das requisições e daí extraia os primeiros…ou o seu codigo já põe os utente todos por ordem com base nas requisições e não apenas 2??me esclarece sff

Obrigado

-TUGA-

Ola,

O meu codigo ordena o colleciton inteiro, no caso a criacao do Comparetor e a condicao para a ordenacao, que o metodo sort ira usar para ordenar… roda ele e faz um teste.

oi

ele esta-me a dar um erro no seu codigo…

“cannot find symbol - method sort(java.util.Collection<Utentes>), <anonymous java.util.Comparator<Utentes>>)”

-TUGA-

Humm… e vero, esqueci que ele so aceita o List… olha a assinatura dele aqui, mas e um problema facil de resolver… so passar ele assim:

utentes = java.util.Collections.sort(new ArrayList<Utente>(utentes)...
E viva o Brasil… na final

oi

mesmo assim ainda tá dando erro…

“cannot find symbol - method sort(<anonymous java.util.ArrayList<Utentes>>)”

-TUGA_

Po, posta o teu codigo ae.

Outra, vc está usando java 5 ou 1.4?

tou usando o 5.0

o codigo todo…isso é muita coisa…eu vou enviar para seu mail…

tou usando o bluej como programa…

-TUGA-

Precisa postar o codigo todo não 8O só a parte que estamos discutindo…

public ArrayList<String> listaCursoMaisR(){
       
       Collection<Utentes> utent = utente.values();
       utent = java.util.Collections.sort(new ArrayList<Utentes> (utent){
           public int compare(Utentes u1, Utentes u2){ 
             if(u1.getObras_ja_requisitadas().size() > u2.getObras_ja_requisitadas().size()){ 
                    return 1; 
    }        else
                if(u1.getObras_ja_requisitadas().size() < u2.getObras_ja_requisitadas().size()){ 
                    return -1; 
    } 
    return 0; 
  } 
}); 
}

m<ndei o projecto na mesma para o mail…

-TUGA-

Ola,

Pô, acho que não espliquei direito… olha só agora:[code]
import java.util.*:

public List listaCursoMaisR(){
List utent = new ArrayList(utente.values());
utent = Collections.sort(utent, new COmparator(){
public int compare(Utentes u1, Utentes u2){
if(u1.getObras_ja_requisitadas().size() > u2.getObras_ja_requisitadas().size()){
return 1;
} else
if(u1.getObras_ja_requisitadas().size() < u2.getObras_ja_requisitadas().size()){
return -1;
}
return 0;
}
}); [/code]

Ve agora…

mesmo assim ainda tá dando erro…

“incompatible types, found void but expected java.lang.list<Utentes>”

na linha

"utent = Collections.sort(utent, new Comparator<Utente>(){ "

-TUGA-

Ola,

Esqueci que o sort de Collections não tem retorno…
só vc tirar o "utent = " e deixar "Collections.sort(utent, new Comparator<Utente>(){ ".