Paolo Boldi
Problemi per la lezione del 18/12
- [Interfaccia Comparable (I)] Vogliamo rendere la classe Persona comparabile, confrontando
due persone sulla base della loro età (cioè, definendo una persona ≤ di un'altra se e solo se la sua età lo è). Fate in modo che la
classe implementi l'interfaccia Comparable<Persona> e sperimentatela, realizzando un metodo main in cui vengono letti i dati
di un certo numero di persone, vengono inseriti in un array e l'array viene ordinato usando il metodo sort
di java.util.Arrays..
- [Interfaccia Comparable (II)] Riprendete la classe Punto realizzata qualche giorno
fa e rendetela comparabile, definendo un punto p minore di un punto p' se e solo se p ha modulo (distanza dall'origine) minore di p'.
Questa relazione rispetta il contratto definito dall'interfaccia? (Consultate la documentazione delle API per decidere)
In caso affermativo, realizzate un main di prova che ordini un array di punti e guardate come vengono ordinati.
- [Classe Orario] Implementate una classe di nome Orario che rappresenta un orario, specificato
come ore e minuti. Internamente, la classe deve mantenere un singolo attributo intero (privato) che rappresenta i minuti trascorsi dalla mezzanotte. (In realtà,
per la realizzazione degli ultimi due metodi indicati sarà necessario aggiungere altri attributi, il cui tipo e significato sono soggetti a vostra valutazione)
La classe deve avere i seguenti costruttori e metodi:
- Orario(int h, int m): costruisce l'orario h:m (h deve essere compreso fra 0 e 23, e m deve essere compreso fra 0 e 59; decidete
come comportarvi se queste condizioni non si verificano);
- Orario(int h): costruisce l'orario h:00
- Orario(): costruisce l'orario corrispondente all'ora attuale; per ottenere tale orario, tenete conto che:
- l'ora attuale si può ottenere con l'istruzione (new GregorianCalendar()).get(Calendar.HOUR_OF_DAY)
- i minuti attuali si possono ottenere con l'istruzione (new GregorianCalendar()).get(Calendar.MINUTE)
- int getOre(): restituisce le ore
- int getMinuti(): restituisce i minuti
- void setOre(int h): cambia le ore, lasciando i minuti invariati
- void setMinuti(int m): cambia i minuti, lasciando le ore invariate
- void setOreMinuti(int h, int m): cambia sia le ore che i minuti
- boolean equals(Orario x): restituisce true sse l'orario su cui è invocato è uguale a x
- int compareTo(Orario x): restituisce un valore negativo se l'orario su cui è invocato viene prima di x, 0 se i due
orari sono uguali, e un valore maggiore di zero se l'orario su cui è invcoato viene dopo
- int quantoManca(Orario x): restituisce il numero di minuti dall'orario target all'orario x (sarà un valore negativo
se x viene prima dell'orario attuale)
- String toString(): restituisce una stringa della forma h:m
- void setSeparatore(char separatore): permette di scegliere con che separatore stampare l'orario (da ora in
avanti verrà usato come separatore il carattere indicato, anziché nel metodo toString())
- void setFormato(boolean formato24): permette di scegliere se stampare l'orario (da ora in poi) nel formato
24 ore, oppure nel formato 12 ore: in questo caso, il metodo toString() dovrà restituire ore della forma
"h:m AM" oppure "h:m PM" (al posto dei : ovviamente dovrete usare il separatore specificato).
Sperimentate la classe, realizzando un programma di test.
- [Classe Retta] Definite una classe di nome Retta le cui istanze rappresentano rette nel piano cartesiano. Devono essere consentite rette qualsiasi
(anche parallele all'asse Y). Poiché la classe Retta usa fra l'altro dei punti, mettete nel progetto una copia
della classe Punto (che avete scritto alcune lezioni fa).
La classe deve fornire almeno i seguenti costruttori e metodi:
- Retta(): costruisce la bisettrice del I/III quadrante;
- Retta(double m, double q): costruisce la retta y=mx+q;
- Retta(double x): costruisce la retta parallela all'asse y e passante per (x,0);
- Retta(Retta r, Punto p): costruisce la retta parallela a r e passante per p;
- Retta(Punto p, Retta r): costruisce la retta perpendicolare a r e passante per p;
- double y(double x): restituisce il valore y tale che (x,y) sta sulla retta (se ne siete
capaci, fate in modo che sollevi un'eccezione
se la retta è verticale);
- boolean isParallela(Retta r): restituisce true sse la retta è parallela a r;
- boolean isPerpendicolare(Retta r): restituisce true sse la retta è perpendicolare a r;
- boolean equals(Object x): restituisce true sse la retta è uguale a x;
- boolean passaPer(Punto p): restituisce true sse la retta passa per p;
- boolean passaPer(Punto[] p): restituisce true sse la retta passa per tutti i punti dell'array p.