FabioJ ha scritto:
Ho creato una classe Persona con tre attributi nome, cognome , annodinascita.
Ho implementato la classe persona parametrizzandola con Comparable<Persona> e ho aggiunto il metodo comapareTo(),( credo sia obbligatorio metterlo) .
Fin qui ok. Nota: i campi li hai messi public. Mentre invece sarebbe meglio se li tieni
private.
Il compareTo va messo poiché imposto dalla interfaccia. Dato che la interfaccia è stata usata
parametrizzata, allora il parametro del compareTo può essere del tipo della parametrizzazione, Persona appunto. Il nome del parametro,
arg0, non è il massimo, metti ad esempio
altraPersona che è più sensato.
Ora resta da implementare compareTo in modo appropriato. All'interno del compareTo hai 2 oggetti Persona: uno è rappresentato (implicitamente) dal
this (l'oggetto su cui è invocato compareTo) e l'altro è rappresentato dal Persona ricevuto in argomento.
Il compareTo deve restituire:
- un valore < 0 se il Persona
this è "minore" dell'altra Persona
- un valore = 0 se il Persona
this è "uguale" all'altra Persona
- un valore > 0 se il Persona
this è "maggiore" dell'altra Persona
Come detto prima, essendo l'ordinamento "naturale", la cosa sensata/logica è l'ordinamento per cognome/nome. Sono entrambi String. Cosa ha String per la comparazione? Guarda la sua documentazione javadoc.
Quindi: prima confronti i due cognomi. Se uno dei due è minore/maggiore dell'altro, hai GIA' la risposta, non devi fare altri confronti. Se invece sono uguali, allora in tal caso confronti i due nomi.