Java - Duda Comparator y Comparable

 
Vista:

Duda Comparator y Comparable

Publicado por Israel82 (1 intervención) el 26/10/2009 05:41:13
Hola, tengo una duda en estos códigos en el cual en Alumno2 estoy usando Comparator y cuando compilo me sale el error Alumno2 cannot be cast to java.lang.Comparable porque sucede esto? si estoy usando Comparator y su método compare(). Gracias por sus respuestas!!.

import java.util.*;

public class Alumno2 implements Comparator<Alumno2>{

int númeroPersonal;
String apellido1, apellido2, nombre;
int numAsignaturas;
double[] notasFinales;
double notaMediaFinal;

public Alumno2(int numPer, String ap1, String ap2, String nom, int numAsig){
númeroPersonal = numPer;
apellido1 = ap1;
apellido2 = ap2;
nombre = nom;
numAsignaturas = numAsig;
notasFinales = new double[numAsignaturas];
}

public Alumno2(int numPer, String ap1, String ap2, String nom, int numAsig, double[] notasF, double nmf){
númeroPersonal = numPer;
apellido1 = ap1;
apellido2 = ap2;
nombre = nom;
numAsignaturas = numAsig;
notasFinales = notasF;
notaMediaFinal = nmf;
}

public int obtenerNp(){
return númeroPersonal;
}

public String toString(){
String resul;
resul = "NP: " + númeroPersonal + "\n" + " Nombre: " + nombre + " Apellido1: " + apellido1 +
" Apellido2: " + apellido2 + "\n" + " Nota Media Final: " + notaMediaFinal + "\n";
return resul;
}

public void asignarNotas(double[][] notas2Eval){
if(notas2Eval == null || notas2Eval.length != 2 || notas2Eval[0].length != numAsignaturas ||
notas2Eval[1].length != numAsignaturas){
throw new IllegalArgumentException("Parámetros no válidos.");
}

for(int asig=0; asig<numAsignaturas; asig++){
notasFinales[asig]=notas2Eval[0][asig] * 0.6 + notas2Eval[1][asig] * 0.4;
}

for(double nota: notasFinales){
notaMediaFinal += nota;
}
notaMediaFinal /= numAsignaturas;
}

public double obtenerNotaMediaFinal(){
return notaMediaFinal;
}

public boolean pasaDeCurso(){
Arrays.sort(notasFinales);
if(notasFinales[2] >= 5 && obtenerNotaMediaFinal() >= 5.0)
return true;
else
return false;
}

public int compare(Alumno2 a1, Alumno2 a2){
if((int)(a1.obtenerNotaMediaFinal() * 100 - a2.obtenerNotaMediaFinal() * 100) == 0){
return a1.obtenerNp() - a2.obtenerNp();
}
return (int)(a1.obtenerNotaMediaFinal() - a2.obtenerNotaMediaFinal());
}
}

import java.util.*;

public class EjTreeSet{
public static void main(String args[]) throws Exception{
TreeSet<Alumno2> treeSetAlum;

treeSetAlum = new TreeSet<Alumno2>();
Alumno2 a1=new Alumno2(1, "Alum1", "Alum1", "Alum1", 5);
Alumno2 a2=new Alumno2(2, "Alum2", "Alum2", "Alum2", 5);
Alumno2 a3=new Alumno2(3, "Alum3", "Alum3", "Alum3", 5);
Alumno2 a4=new Alumno2(4, "Alum4", "Alum4", "Alum4", 5);
Alumno2 a5=new Alumno2(5, "Alum5", "Alum5", "Alum5", 5);
Alumno2 a6=new Alumno2(6, "Alum6", "Alum6", "Alum6", 5);
Alumno2 a7=new Alumno2(7, "Alum7", "Alum7", "Alum7", 5, null, 5.0);
Alumno2 a8=new Alumno2(8, "Alum8", "Alum8", "Alum8", 5, null, 5.0);

double[][] buenasNotas = {{10.0, 10.0, 10.0, 10.0, 10.0},
{10.0, 10.0, 10.0, 10.0, 10.0}};

double[][] malasNotas = {{4.0, 4.0, 4.0, 4.0, 4.0},
{4.0, 4.0, 4.0, 4.0, 4.0}};

a1.asignarNotas(buenasNotas);
a2.asignarNotas(malasNotas);
a3.asignarNotas(buenasNotas);
a4.asignarNotas(malasNotas);
a5.asignarNotas(buenasNotas);
a6.asignarNotas(malasNotas);

treeSetAlum.add(a1);
treeSetAlum.add(a2);
treeSetAlum.add(a3);
treeSetAlum.add(a4);
treeSetAlum.add(a5);
treeSetAlum.add(a6);
treeSetAlum.add(a7);
treeSetAlum.add(a8);

SortedSet<Alumno2> aprobados;
aprobados = treeSetAlum.tailSet(new Alumno2(0, null, null, null, 0, null, 5.0));

SortedSet<Alumno2> aplazados;
aplazados = treeSetAlum.headSet(new Alumno2(0, null, null, null, 0, null, 5.0));

System.out.println("Alumnos aprobados: ");
System.out.println(aprobados);
System.out.println("Alumnos aplazados: ");
System.out.println(aplazados);
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder