LABORATORIO DI PROGRAMMAZIONE DI STRUTTURE DATI
ESERCIZI SU GESTIONE DELLE ECCEZIONI -- Gruppo 2
20 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/Lez2003

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 LeggiReali che crea un array di double di dimensione 5, e successivamente chiede all'utente 5 numeri reali leggendoli con il metodo readDouble() della classe ConsoleReader e li inserisce nell'array. Infine stampa il contenuto dell'array.
Si noti che se l'utente non scrive un numero (ad esempio, se scrive "34bc") allora il metodo readDouble() genera un'eccezione. Il programma deve essere modificato in modo da catturare l'eccezione generata in questi casi, e chiedere nuovamente il numero all'utente se l'input era sbagliato.

Esercizio 4

Scrivere un programma ContaVittorie che riceve in input una serie di risultati di partite calcistiche, nel formato cc-pp (dove cc e' un numero di due cifre che corrisponde al numero di goal della squadra di casa e pp e' un nunero di due cifre che corrisponde al numero di goal della squadra in trasferta) e conta il numero di partite in cui ha vinto la squadra che giocava in casa. Per fare questo, il programma estrae i primi due caratteri dalla stringa (che rappresenta il risultato) letta in input e li confronta con gli ultimi due caratteri di tale stringa.
Il programma deve catturare le eccezioni generate nel caso di input con formato non valido, visualizzando un opportuno messaggio. 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.