LABORATORIO DI PROGRAMMAZIONE DI STRUTTURE DATI
ESERCIZI SU GESTIONE DELLE ECCEZIONI -- Gruppo 1
18 Marzo 2002

Risolvere i problemi elencati sotto NELL'ORDINE IN CUI SONO ELENCATI. Non si richiede di scrivere TUTTI  i programmi, ma quelli risolti devono compilare correttamente e produrre i risultati richiesti.

Alla fine dell'esercitazione, copiare tutti i file prodotti in una cartella identificata dai cognomi dei componenti del gruppo, sotto serverPu/Esercizi/Lez1803

Siete invitati a completare (alcuni de)gli esercizi fuori dall'orario di esercitazione, soprattutto se avete trovato serie difficoltà a svolgerli. Potete mandare l'eventuale completamento all'indirizzo guerrini@disi.unige.it
 

Esercizio 1

Provare a compilare ed eseguire i seguenti programmi:

Dopo aver esaminato attentamente il tipo di eccezione generato, correggere i programmi in modo da catturare le eccezioni generate ed assicurare che l'esecuzione prosegua. Quando una eccezione è stata catturata, i programmi devono stampare il seguente messaggio: "Eccezione catturata!!!".

Esercizio 2

Provare a compilare ed eseguire il seguente programma (scaricando anche le classi Circle e Point) :

public class EsEccezioni{
    // Chiede un intero all'utente:
    // se il numero e' pari crea e stampa un Point
    // se il numero e' dispari crea e stampa un Circle
    public static void main (String [] args){
        Point p;
        ConsoleReader console = new ConsoleReader(System.in);
        System.out.print("Scrivi un numero intero: ");
        int input = console.readInt();
        if (input%2 == 0)
            p = new Point(7,5); 
        else 
            p = new Circle(7, 5, 32);
    //*****************************************************
        if (!(p  instanceof Circle)){ 
            System.out.print("\nHo costruito il punto: ");
            System.out.println(p+"\n");
        }else{
            double area = ((Circle) p).area();
            System.out.println("Ho costruito il seguente cerchio: ");
            System.out.println(p);
            System.out.print("avente area:  ");
            System.out.println(area+"\n");
        }
    }
}

Modificare la classe EsEccezioni in modo che

  1. si chiami SolEccezioni
  2. abbia ESATTAMENTE lo stesso comportamento di EsEccezioni
  3. sia diverso da EsEccezionisolo nella parte sotto la linea di asterischi, dove non deve comparire né un comando if né il predicato instanceof. Bisogna invece usare in modo opportuno la gestione delle eccezioni.

Esercizio 3

Scrivere il programma LeggiInteri che crea un array di interi di dimensione 5, e successivamente chiede all'utente 5 interi leggendoli con il metodo readInt() della classe ConsoleReader e li inserisce nell'array. Infine stampa il contenuto dell'array.
Si noti che se l'utente non scrive un numero intero (ad esempio, se scrive "3.0" oppure "34bc") allora il metodo readInt() genera un'eccezione. Il programma deve essere modificato in modo da catturare l'eccezione generata in questi casi, e chiedere nuovamente l'intero all'utente se l'input era sbagliato.

Esercizio 4

Scrivere un programma ContaDate che riceve in input una serie di date, nel formato gg.mm.aaaa e conta il numero di date in cui l'anno è maggiore o uguale a 1999. Per fare questo, il programma estrae gli ultimi quattro caratteri dalla stringa (che rappresenta la data) letta in input.
Il programma deve catturare le eccezione generate nel caso di input con formato non valido. A seconda dell'eccezione sollevata, deve essere visualizzato un messaggio piuttosto che un altro. In ogni caso, poiché l'eccezione sollevata è stata gestita, l'esecuzione deve proseguire normalmente.

Esercizio 5

La classe ConsoleReader lancia un'eccezione nei metodi readInt() e readDouble() se il dato fornito in input dall'utente non ha un formato corretto. Si chiede di scrivere una classe chiamata SafeConsoleReader che offre esattamente gli stessi metodi di ConsoleReader, ma in modo tale che non venga mai lanciata un'eccezione: se il dato in input non è corretto, il metodo richiede il dato all'utente fin quando necessario. Nella scrittura della nuova classe si chiede di sfruttare al meglio la classe ConsoleReader esistente.
Si scriva un programmino per testare la classe SafeConsoleReader. Se funziona correttamente, si consiglia di usare in futuro questa classe al posto di ConsoleReader in tutti i programmi che fanno input da tastiera.