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:
-
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
-
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.
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.
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.