Olá pessoal!
Estou com uma dúvida…
Eu pesquisei na internet sobre como calcular a MODA de uma lista…
No meu caso eu tenho uma lista ligada por cursores…
onde:
uso = posição primeiro elemento;
livre = primeira posição livre;
prox[livre] = próxima posição livre da lista;
prox[uso] = posição do próximo elemento;
info[uso] = o primeiro elemento propriamente dito.
OMEGA = quando o elemtno for o último ele aposta para OMEGA. Exemplo: prox[uso] = OMEGA; Nesse caso a lista tem apenas um elemento. OU prox[livre] = OMEGA; Nesse caso a lista está cheia, nenhuma posição livre.
Se eu atribuo o valor info[posicao] para alguma variável, essa variável deve ser Object.
Object x = info[posicao];
Ou então eu devo fazer um casting…
Integer x = (Integer)info[posicao];
Bom, agora o meu problema, tenho uma lista com N elementos. Todos eles são do tipo Object.
Para calcular a MODA da lista, eu precisaria (hipotéticamente) de um HashMap e um HashSet.
Mas não é possivel fazer o casting de Object para Map ou qualquer outro objeto para Map.
Desenvolvi (depois de muitas pesquisas) o código abaixo.
public Object Moda() {
Map valores = new HashMap();
Integer maior = null;
Set resultado = new HashSet();
int temp = uso;
while (prox[temp] != OMEGA) { //laço para percorre toda a lista.
valores = info[temp];
Iterator iterator = valores.keySet().iterator();
while (iterator.hasNext()) {
Integer valor = (Integer)iterator.next();
Integer current = (Integer)valores.get(valor);
if (maior == null) {
maior = current;
}
if (maior.compareTo(current) <= 0) {
maior = current;
resultado.add(valor);
}
}
iterator = resultado.iterator();
while (iterator.hasNext()) {
Integer numero = (Integer)iterator.next();
if (((Integer)valores.get(numero)).compareTo(maior) < 0) {
iterator.remove();
}
}
temp = prox[temp];
}
return resultado;
}
Contudo na linha valores = info[temp]; dá erro…
found : java.lang.Object
required: java.util.Map
Alguém pode me ajudar a arrumar esse erro?
Ou me ajudar, sem dar o código pronto, bolar um outro algoritmo para calcular a MODA sem usar Map…
Eu pensei em vários algoritmos, mas todos estão errados pois não conseguem calcular a MODA se ela for bimodal, trimodal ou polimodal.
Abraço!