Paolo Boldi
Problemi per la lezione del 12/1
- [Eccezioni in Orario (I)] Modificate il costruttore della classe Orario in modo
che sollevi una IllegalArgumentException (che è un'eccezione non controllata) se il numero di minuti non è
compreso fra 0 e 59, o il numero di ore non è compreso fra 0 e 23.
Come potrete verificare, tutto il progetto continua a compilare (perché?). Provate di nuovo la classe Orario usando un main
che provochi l'eccezione.
- [Eccezioni in Orario (II)] Create una classe di eccezione controllata di nome OrarioIllegaleException
e fate sollevare al costruttore di Orario un'eccezione di questo tipo anziché una IllegalArgumentException,
creandola con un messaggio opportuno che spieghi se sono sbagliate le ore o i minuti. Modificate la parte restante del
codice del progetto in modo che compili e provate di nuovo la classe.
- [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 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 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 (e solleva 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.