×

Esercizi sulle eccezioni in Java

Questa sezione contiene i principali esercizi svolti a lezione, o assegnati per lo svolgimento a casa, o in laboratorio.
L'elenco sarà aggiornato sulla base delle esigenze didattiche e/o delle osservazioni/considerazioni che emergeranno durante l'interazione con gli allievi.

Nota:
Attenzione, la numerazione degli esercizi non è definitiva e può cambiare nel tempo, man mano che vengono inseriti nuovi esercizi, o riorganizzati quelli esistenti.
Fare riferimento al titolo per individuare, nel tempo, esercizi specifici.

1) Quoziente della divisione tra interi

Realizzare una applicazione Java che chieda all'utente di inserire due numeri interi, calcoli e stampi il quoziente intero della divisione tra i due numeri, qualora possibile.
Nel caso in cui il divisore sia nullo, l'applicazione deve intercettare l'eccezione e visualizzare un messaggio di errore del tipo "Impossibile calcolare il quoziente della divisione tra <dividendo> e <divisore>, il divisore è nullo!".

Esempio 1
Inserire il dividendo: 10
Inserire il divisore: 4
Output:
Il quoziente della divisione tra 10 e 4 è 2.

Esempio 2
Inserire il dividendo: 10
Inserire il divisore: 0
Output:
Impossibile calcolare il quoziente della divisione tra 10 e 0, il divisore è nullo!

2) Resto della divisione tra interi

Realizzare una applicazione Java che chieda all'utente di inserire due numeri interi, calcoli e stampi il resto intero della divisione tra i due numeri, qualora possibile.
Nel caso in cui il divisore sia nullo, l'applicazione deve intercettare l'eccezione e visualizzare un messaggio di errore del tipo "Impossibile calcolare il resto della divisione tra <dividendo> e <divisore>, il divisore è nullo!".

Esempio 1
Inserire il dividendo: 10
Inserire il divisore: 3
Output:
Il resto della divisione tra 10 e 3 è 1.

Esempio 2
Inserire il dividendo: 10
Inserire il divisore: 0
Output:
Impossibile calcolare il resto della divisione tra 10 e 0, il divisore è nullo!

3) Reciproco di un numero intero

Realizzare una applicazione Java che chieda all'utente di inserire un numero intero, calcoli e stampi il reciproco del valore inserito, qualora possibile.
Nel caso in cui il numero inserito sia nullo, l'applicazione deve intercettare l'eccezione e visualizzare un messaggio di errore del tipo "Impossibile calcolare il reciproco di 0!".

Esempio 1
Inserire un numero intero: 10
Output:
Il reciproco di 10 è 0.1.

Esempio 2
Inserire un numero intero: 0
Output:
Impossibile calcolare il reciproco di 0!

4) Quoziente della divisione tra interi con nuova eccezione

Realizzare una applicazione Java che chieda all'utente di inserire due numeri interi, calcoli e stampi, utilizzando una funzione statica appositamente definita in una classe MathFunctions, il quoziente intero della divisione tra i due numeri, qualora possibile.
Nel caso in cui il divisore sia nullo, tale funzione deve sollevare una eccezione QuozienteInteroException, che deve permettere di ottenere, attraverso il metodo getMessage, il messaggio "Impossibile calcolare il quoziente della divisione tra <dividendo> e 0, il divisore è nullo!"

Esempio 1
Inserire il dividendo: 10
Inserire il divisore: 3
Output:
Il quoziente della divisione tra 10 e 3 è 3.

Esempio 2
Inserire il dividendo: 10
Inserire il divisore: 0
Output:
Impossibile calcolare il quoziente della divisione tra 10 e 0, il divisore è nullo!

5) Resto della divisione tra interi con nuova eccezione

Realizzare una applicazione Java che chieda all'utente di inserire due numeri interi, calcoli e stampi, utilizzando una funzione statica appositamente definita in una classe MathFunctions, il resto intero della divisione tra i due numeri, qualora possibile.
Nel caso in cui il divisore sia nullo, tale funzione deve sollevare una eccezione RestoInteroException, che deve permettere di ottenere, attraverso il metodo getMessage, il messaggio "Impossibile calcolare il resto della divisione tra <dividendo> e 0, il divisore è nullo!"

Esempio 1
Inserire il dividendo: 10
Inserire il divisore: 3
Output:
Il quoziente della divisione tra 10 e 3 è 3.

Esempio 2
Inserire il dividendo: 10
Inserire il divisore: 0
Output:
Impossibile calcolare il quoziente della divisione tra 10 e 0, il divisore è nullo!

6) Reciproco di un numero intero con nuova eccezione

Realizzare una applicazione Java che chieda all'utente di inserire un numero intero, calcoli e stampi, utilizzando una funzione statica appositamente definita in una classe MathFunctions, il reciproco del numero inserito, qualora possibile.
Nel caso in cui il valore inserito sia nullo, tale funzione deve sollevare una eccezione ReciprocoException, che deve permettere di ottenere, attraverso il metodo getMessage, il messaggio "Impossibile calcolare il reciproco di 0!"

Esempio 1
Inserire un numero intero: 10
Output:
Il reciproco di 10 è 0.1.

Esempio 2
Inserire un numero intero: 0
Output:
Impossibile calcolare il reciproco di 0!

7) Radice quadrata di un numero con nuova eccezione

Realizzare una applicazione Java che chieda all'utente di inserire un numero, calcoli e stampi, utilizzando una funzione statica appositamente definita in una classe MathFunctions, la radice quadrata del numero inserito, qualora possibile.
Nel caso in cui il valore inserito sia negativo, tale funzione deve sollevare una eccezione RadicandoNegativoException, che deve permettere di ottenere, attraverso il metodo getMessage, il messaggio "Impossibile calcolare la radice quadrata di <radicando>, radicando negativo!"

Esempio 1
Inserire un numero intero: 16
Output:
La radice quadrata di 16 è 4.

Esempio 2
Inserire un numero intero: -25
Output:
Impossibile calcolare la radice quadrata di -25, radicando negativo!

8) Fattoriale di un numero con nuova eccezione

Realizzare una applicazione Java che chieda all'utente di inserire un numero, calcoli e stampi, utilizzando una funzione statica appositamente definita in una classe MathFunctions, il fattoriale del numero inserito, qualora possibile.
Nel caso in cui il valore inserito sia negativo, tale funzione deve sollevare una eccezione ArgomentoNegativoException, che deve permettere di ottenere, attraverso il metodo getMessage, il messaggio "Impossibile calcolare il fattoriale di <numero>, perché negativo!"

Esempio 1
Inserire un numero intero: 5
Output:
Il fattoriale di 5 è 120.

Esempio 2
Inserire un numero intero: -3
Output:
Impossibile calcolare il fattoriale -3, perché negativo!

Soluzione

9) Logaritmo naturale di un numero con nuova eccezione

Realizzare una applicazione Java che chieda all'utente di inserire un numero, calcoli e stampi, utilizzando una funzione statica appositamente definita in una classe MathFunctions, il logaritmo naturale del numero inserito, qualora possibile.
Nel caso in cui il valore inserito sia negativo o nullo, tale funzione deve sollevare una eccezione ArgomentoNonValidoException, che deve permettere di ottenere, attraverso il metodo getMessage, il messaggio "Impossibile calcolare il logaritmo naturale di <numero>, perché negativo!" o "Impossibile calcolare il logaritmo naturale di <numero>, perché nullo!", a seconda del valore numerico inserito dall'utente.

Esempio 1
Inserire un numero intero: 1
Output:
Il logaritmo naturale di 1 è 0.

Esempio 2
Inserire un numero intero: -3
Output:
Impossibile calcolare il logaritmo naturale di -3, perché negativo!

Esempio 3
Inserire un numero intero: 0
Output:
Impossibile calcolare il logaritmo naturale di 0, perché nullo!

10) Giorno della settimana di una data in input

Realizzare una applicazione Java che chieda all'utente di inserire tre numeri interi rappresentanti il giorno, il mese e l'anno di una data, calcoli e stampi, utilizzando una funzione statica appositamente definita in una classe DateFunctions, il giorno della settimana della data inserita, qualora possibile.
Nel caso in cui i valori inseriti non corrispondano ad una data valida, tale funzione deve sollevare una eccezione DataNonValidaException, che deve permettere di ottenere, attraverso il metodo getMessage, il messaggio "La data giorno/mese/anno non corrisponde ad una data valida!
N.b.: il giorno risultante può essere anche in inglese.

Esempio 1
Inserire il giorno: 1
Inserire il mese: 1
Inserire l'anno: 2024
Output:
Il giorno del 01/01/2024 è lunedì.

Esempio 2
Inserire il giorno: 35
Inserire il mese: 15
Inserire l'anno: 2024
Output:
La data 35/15/2024 non corrisponde ad una data valida!

Soluzione

11) Soluzioni equazione di secondo grado

Realizzare una applicazione Java che chieda all'utente di inserire tre numeri rappresentanti i coefficienti a, b, c di una equazione di secondo grado ax^2 + bx + c = 0, calcoli e stampi, utilizzando una funzione statica appositamente definita in una classe MathFunctions, le soluzioni reali dell'equazione, qualora possibile.
Nel caso l'equazione sia impossibile, tale funzione deve sollevare una eccezione, che deve permettere di ottenere, attraverso il metodo getMessage, il messaggio "L'equazione ax^2 + bx + c = 0 non ammette soluzioni reali!", dove al posto di a, b, c ci siano i valori inseriti dall'utente.

Esempio 1
Inserire il coefficiente a: 1
Inserire il coefficiente b: -5
Inserire il coefficiente c: 6
Output:
Le soluzioni dell'equazione x^2 - 5x + 6 = 0 sono x1 = 3 e x2 = 1.

Esempio 2
Inserire il coefficiente a: 1
Inserire il coefficiente b: -4
Inserire il coefficiente c: 4
Output:
Le soluzioni dell'equazione x^2 - 4x + 4 = 0 sono coincidenti e sono x1 = x2 = 2.

Esempio 3
Inserire il coefficiente a: 1
Inserire il coefficiente b: 4
Inserire il coefficiente c: 5
Output:
L'equazione x^2 + 4x + 5 = 0 non ammette soluzioni reali!.

12) Automobile - Antifurto

Realizzare una applicazione Java che implementi una classe Automobile con caratteristiche a scelta.
Tra i metodi della classe, implementare i metodi che seguono:

  1. accendi che permetta di accendere il motore dell'automobile, sollevando, eventualmente, l'eccezione AntifurtoInserito, nel caso in cui l'antifurto non sia stato disinserito in precedenza
  2. inserisciAntifurto, che sollevi, eventualmente, l'eccezione AutomobileAccesa, nel caso in cui l'automobile non sia stata spenta in precedenza.

Le due eccezioni devono, inoltre, permettere di ottenere, rispettivamente, i messaggi "Impossibile accendere l'automobile <targa>, l'antifurto non è stato disinserito!" e "Impossibile inserire l'antifurto sull'automobile <targa>, il motore è ancora acceso!", nei quali le informazioni tra i simboli < e > devono essere sostituite con la targa dell'automobile su cui si verifica l'eccezione.

Verificare il funzionamento dell'applicazione implementando un metodo main che istanzi automobili a piacere ed invochi i metodi implementati dimostrando il funzionamento delle classi eccezione e gestendole correttamente, in modo che il programma non termini in modo anomalo.

13) Magazzino prodotti

Realizzare una applicazione Java che implementi un magazzino di prodotti con caratteristiche a scelta (utilizzare un array per contenere i prodotti presenti).
Tra i metodi della classe magazzino, implementare il metodo prelevaProdotto che prelevi dal magazzino la quantità richiesta di un prodotto indicato, sollevando, eventualmente, l'eccezione ProdottoNonTrovato, nel caso in cui il prodotto richiesto non sia presente, oppure QuantitaProdottoInsufficiente, nel caso in cui il prodotto esista, ma la sua quantità in magazzino non sia sufficiente a permettere il prelevamento richiesto.
Le due eccezioni devono, inoltre, permettere di ottenere, rispettivamente, i messaggi "Il prodotto <nome prodotto> non è presente in magazzino!" oppure "La quantità di <nome prodotto> presente in magazzino (<quantità presente>) è inferiore alla quantità richiesta (<quantità richiesta>)!", nei quali le informazioni tra i simboli < e > devono essere sostituite con il nome del prodotto richiesto e le quantità presenti/richieste.
Verificare il funzionamento dell'applicazione implementando un metodo main che istanzi un magazzino, vi depositi tre prodotti a scelta e provi a prelevare un prodotto non esistente, gestendo l'eccezione. Successivamente prelevi una quantità ammessa di un altro prodotto esistente e subito dopo una quantità superiore al residuo dello stesso prodotto, gestendone l'eccezione.

Eventuale estensione dell'esercizio:
Definire una eccezione MagazzinoPieno che sia sollevata quando non è possibile depositare altri prodotti in magazzino, che permetta di ottenere il messaggio "Impossibile depositare il prodotto <nome prodotto>, magazzino pieno!".
Verificarne, successivamente, il funzionamento, nel metodo main, aggiungendo i prodotti residui per il riempimento del magazzino, attraverso un ciclo a scelta e gestendone l'eccezione in modo che il programma non termini in modo anomalo.

14) Carrello prodotti

Realizzare una applicazione Java che implementi un carrello di prodotti, per una piattaforma di acquisti online. Ciascun prodotto dovrà avere almeno le seguenti caratteristiche: codice, nome, genere e prezzo del prodotto.
Aggiungere eventuali altre caratteristiche ritenute utili, a proprio piacimento. Utilizzare gli array per implementare i prodotti inseriti nel carrello.
Tra i metodi ritenuti necessari nella classe carrello, implementare:

  • rimuoviProdotto, che prenda in input una quantità ed un codice prodotto e rimuova dal carrello la quantità richiesta del prodotto con tale codice, sollevando, eventualmente, l'eccezione ProdottoNonTrovato, nel caso in cui il prodotto richiesto non sia presente, oppure rimuova dal carrello il prodotto indicato, nel caso in cui il prodotto esista e la quantità nel carrello sia inferiore o uguale alla quantità da rimuovere
  • paga, che prenda in input la quantità di denaro disponibile, calcoli il costo totale dei prodotti presenti nel carrello, svuoti il carrello e restituisca il resto dovuto, oppure sollevi l'eccezione DenaroInsufficiente, nel caso in cui la quantità di denaro fornita sia insufficiente a pagare i prodotti presenti nel carrello
  • pagaInCassaVeloce, che prenda in input la quantità di denaro disponibile e la quantità massima di prodotti ammessi per il pagamento in cassa veloce, calcoli il costo totale dei prodotti presenti nel carrello, svuoti il carrello e restituisca il resto dovuto, oppure sollevi nell'ordine opportuno le eccezioni LimiteArticoli o DenaroInsufficiente, nel caso in cui il numero degli articoli da pagare sia superiore alla quantità massima ammessa per il pagamento in cassa veloce, oppure la quantità di denaro fornita sia insufficiente a pagare i prodotti presenti nel carrello
L'eccezione ProdottoNonTrovato deve permettere di ottenere il messaggio "Il prodotto <codice prodotto> non è presente nel carrello!", nel quale l'informazione tra i simboli < e > deve essere sostituita con il codice del prodotto da rimuovere.
L'eccezione DenaroInsufficiente deve permettere di ottenere il messaggio "Impossibile pagare, il denaro a disposizione (<denaro disponibile>) non è sufficiente a pagare il prezzo dei prodotti inseriti nel carrello (<costo totale>)"", dove le informazioni tra i simboli < e > devono essere sostituite con gli importi di denaro disponibile e del costo totale dei prodotti nel carrello.
L'implementazione dell'eccezione LimiteArticoli è lasciata alla libera analisi dello studente.
Verificare, inoltre, il funzionamento dell'applicazione implementando un metodo main che istanzi un carrello, vi depositi alcuni prodotti a scelta, provi a rimuovere un prodotto non esistente, gestendo l'eccezione.
Successivamente rimuova una quantità ammessa di un altro prodotto esistente ed una quantità superiore a quella inserita nel carrello di un altro prodotto, verificando che il carrello si svuoti per quello specifico prodotto.
Infine paghi in cassa veloce indicando un numero di prodotti inferiore a quanto inserito nel carrello e gestica l'eccezione, successivamente paghi in cassa normale indicando una quantità di denaro disponibile non sufficiente a coprire l'importo dei prodotti nel carrello e gestisca l'eccezione ed alla fine paghi in cassa normale indicando una quantità di denaro sufficiente e verifichi che il carrello sia stato svuotato.

Inserire nel metodo main i commenti necessari per spiegare, ad ogni passo, le istruzioni inserite ed il tipo di test che si sta facendo.