Sei sulla pagina 1di 8

CAPITOLO 10 ECCEZZIONI import java.util.

Scanner; public class PrendiLatte { public static void main(String[] args) { Scanner tastiera = new Scanner(System.in); System.out.println("Inserire il numero di ciambelle:"); int conteggioCiambelle = tastiera.nextInt(); System.out.println("Inserire il numero di bicchieri di latte:"); int conteggioLatte = tastiera.nextInt(); //Gestione degli eventi eccezionali senza utilizzare le struttre //di gestione delle eccezioni di Java if (conteggioLatte < 1) { System.out.println("Niente latte!"); System.out.println("Vai a comprare del latte."); } else { double ciambellePerBicchiere = conteggioCiambelle / (double)conteggioLatte; System.out.println(conteggioCiambelle + " ciambelle."); System.out.println(conteggioLatte + " bicchieri di latte."); System.out.println("Hai " + ciambellePerBicchiere + " ciambelle per ogni bicchiere di latte."); } System.out.println("Fine programma."); } } import java.util.Scanner; public class PrendiLatteConEccezioni { public static void main(String[] args) { Scanner tastiera = new Scanner(System.in); try { System.out.println("Inserire il numero di ciambelle:"); int conteggioCiambelle = tastiera.nextInt(); System.out.println("Inserire il numero di bicchieri di latte:"); int conteggioLatte = tastiera.nextInt(); if (conteggioLatte < 1) throw new Exception("Eccezione: Niente latte!"); double ciambellePerBicchiere = conteggioCiambelle / (double)conteggioLatte; System.out.println(conteggioCiambelle + " ciambelle."); System.out.println(conteggioLatte + " bicchieri di latte."); System.out.println("Hai " + ciambellePerBicchiere + " ciambelle per ogni bicchiere di latte."); } catch(Exception e) { System.out.println(e.getMessage()); System.out.println("Vai a comprare del latte."); } System.out.println("Fine programma."); } }

public class DivisionePerZeroException extends Exception { public DivisionePerZeroException() { super("Divisione per zero!"); } public DivisionePerZeroException(String messaggio) { super(messaggio); } } import java.util.Scanner; public class DividiPerZeroDemo { private int numeratore; private int denominatore; private double quoziente; public void fai() { try { System.out.println("Inserisci numeratore:"); Scanner tastiera = new Scanner(System.in); numeratore = tastiera.nextInt(); System.out.println("Inserisci denominatore:"); denominatore = tastiera.nextInt(); if (denominatore == 0) throw new DivisionePerZeroException(); quoziente = numeratore / (double)denominatore; System.out.println(numeratore + "/" + denominatore + " = " + quoziente); } catch(DivisionePerZeroException e) { System.out.println(e.getMessage()); daiSecondaPossibilita(); } System.out.println("Fine programma."); } public void daiSecondaPossibilita() { System.out.println("Tenta di nuovo."); System.out.println("Inserisci numeratore:"); Scanner tastiera = new Scanner(System.in); numeratore = tastiera.nextInt(); System.out.println("Inserisci denominatore:"); System.out.println("Accertati che il denominatore non sia zero."); denominatore = tastiera.nextInt(); if (denominatore == 0) { System.out.println("Non posso dividere per zero."); System.out.println("Poiche' non posso fare cio' che chiedi,"); System.out.println("il programma terminera' ora."); System.exit(0); } quoziente = ((double)numeratore) / denominatore; System.out.println(numeratore + "/" + denominatore + " = " + quoziente); } public static void main(String[] args) { DividiPerZeroDemo unaVolta = new DividiPerZeroDemo();

unaVolta.fai(); } } import java.util.Scanner; public class FaiDivisione { private int numeratore; private int denominatore; private double quoziente; public void casoNormale() throws DivisionePerZeroException { System.out.println("Inserisci numeratore:"); Scanner tastiera = new Scanner(System.in); numeratore = tastiera.nextInt(); System.out.println("Inserisci denominatore:"); denominatore = tastiera.nextInt(); if (denominatore == 0) throw new DivisionePerZeroException(); quoziente = numeratore / (double)denominatore; System.out.println(numeratore + "/" + denominatore + " = " + quoziente); } public void daiSecondaPossibilita() { System.out.println("Tenta di nuovo."); System.out.println("Inserisci numeratore:"); Scanner tastiera = new Scanner(System.in); numeratore = tastiera.nextInt(); System.out.println("Inserisci denominatore:"); System.out.println("Accertati che il denominatore non sia zero."); denominatore = tastiera.nextInt(); if (denominatore == 0) { System.out.println("Non posso dividere per zero."); System.out.println("Poiche' non posso fare cio' che chiedi,"); System.out.println("il programma terminera' ora."); System.exit(0); } quoziente = ((double)numeratore) / denominatore; System.out.println(numeratore + "/" + denominatore + " = " + quoziente); } public static void main(String[] args) { FaiDivisione fai = new FaiDivisione(); try { fai.casoNormale(); } catch(DivisionePerZeroException e) { System.out.println(e.getMessage()); fai.daiSecondaPossibilita(); } System.out.println("Fine Programma."); } } import java.util.Scanner; public class DueCatchDemo {

public static double divisioneEccezionale(double numeratore, double denominatore) throws DivisionePerZeroException { if (denominatore == 0) throw new DivisionePerZeroException(); return numeratore / denominatore; } public static void main(String[] args) { try { System.out.println("Inserire il numero di oggetti prodotti:"); Scanner tastiera = new Scanner(System.in); int oggetti = tastiera.nextInt(); if (oggetti < 0) throw new NumeroNegativoException("oggetti"); System.out.println("Quanti di questi erano difettosi?"); int difettosi = tastiera.nextInt(); if (difettosi < 0) throw new NumeroNegativoException("oggetti difettosi"); double rapporto = divisioneEccezionale(oggetti, difettosi); System.out.println("Un oggetto ogni " + rapporto + " e' difettoso"); } catch(DivisionePerZeroException e) { System.out.println("Congratulazioni! Un record perfetto!"); } catch(NumeroNegativoException e) { System.out.println("Impossibile avere un numero negativo di " + e.getMessage()); } System.out.println("Fine programma."); } } public class NumeroNegativoException extends Exception { public NumeroNegativoException() { super("Eccezione numero negativo!"); } public NumeroNegativoException(String messaggio) { super(messaggio); } } public class OpSconosciutaException extends Exception { public OpSconosciutaException() { super("OpSconosciutaException"); } public OpSconosciutaException(char op) { super(op + " e' un operatore sconosciuto."); } public OpSconosciutaException(String messaggio) { super(messaggio); } } import java.util.Scanner;

/** VERSIONE PRELIMINARE senza gestione delle eccezioni. Semplice calcolatrice testuale. La classe pu anche essere utilizzata per creare altri programmi simili. */ public class CalcolatricePreliminare { private double risultato; private double precisione = 0.0001; //Numeri cos prossimi a zero sono considerati pari a zero. public CalcolatricePreliminare() { risultato = 0; } public void reset(){ risultato = 0; } public void setRisultato(double nuovoRisultato) { risultato = nuovoRisultato; } public double getRisultato() { return risultato; } /** Restituisce n1 op n2, ammesso che op sia +, , * e /. Ogni altro valore di op lancia una OpSconosciutaException. */ public double valuta(char op, double n1, double n2) throws DivisionePerZeroException, OpSconosciutaException { double risposta; switch (op) { case '+': risposta = n1 + n2; break; case '-': risposta = n1 - n2; break; case '*': risposta = n1 * n2; break; case '/': if ((-precisione < n2) && (n2 < precisione)) throw new DivisionePerZeroException(); risposta = n1 / n2; break; default: throw new OpSconosciutaException(op); } return risposta; } public void eseguiCalcoli() throws DivisionePerZeroException, OpSconosciutaException { Scanner tastiera = new Scanner(System.in); boolean fatto = false; risultato = 0; System.out.println("risultato = " + risultato); while (!fatto) {

char prossimaOp = (tastiera.next()).charAt(0); if ((prossimaOp == 'f') || (prossimaOp == 'F')) fatto = true; else { double prossimoNumero = tastiera.nextDouble(); risultato = valuta(prossimaOp, risultato, prossimoNumero); System.out.println("risultato " + prossimaOp + " " + prossimoNumero + " = " + risultato); System.out.println("risultato aggiornato = " + risultato); } } } public static void main(String[] args) throws DivisionePerZeroException, OpSconosciutaException { CalcolatricePreliminare calc = new CalcolatricePreliminare(); System.out.println("Calcolatrice attivata."); System.out.print("Formato di ogni linea: "); System.out.println("operatore spazio numero"); System.out.println("Per esempio: + 3"); System.out.println("Per terminare inserire la lettera 'f'."); calc.eseguiCalcoli(); System.out.println("Il risultato finale e' " + calc.getRisultato()); System.out.println("Fine del programma."); } } import java.util.Scanner; /** Semplice calcolatrice testuale. La classe pu anche Essere utilizzata per creare altri programmi simili. */ public class Calcolatrice { private double risultato; private double precisione = 0.0001; //Numeri cos prossimi a zero sono considerati pari a zero. public Calcolatrice() { risultato = 0; } public void gestisciDivisionePerZeroException(DivisionePerZeroException e) { System.out.println("Divisione per zero."); System.out.println("Programma terminato."); System.exit(0); } public void gestisciOpSconosciutaException(OpSconosciutaException e) { System.out.println(e.getMessage()); System.out.println("Riprova dallinizio:"); try { System.out.print("Formato di ogni linea: "); System.out.println("operatore spazio numero"); System.out.println("Per esempio: + 3"); System.out.println("Per terminare inserire la lettera f."); eseguiCalcoli(); } catch(OpSconosciutaException e2) { System.out.println(e2.getMessage()); System.out.println("Riprova in un secondo momento.");

System.out.println("Fine del programma."); System.exit(0); } catch(DivisionePerZeroException e3) { gestisciDivisionePerZeroException(e3); } } public void reset(){ risultato = 0; } public void setRisultato(double nuovoRisultato) { risultato = nuovoRisultato; } public double getRisultato() { return risultato; } /** Restituisce n1 op n2, ammesso che op sia uno tra +, , * e /. Ogni altro valore di op lancia una OpSconosciutaException. */ public double valuta(char op, double n1, double n2) throws DivisionePerZeroException, OpSconosciutaException { double risposta; switch (op) { case '+': risposta = n1 + n2; break; case '-': risposta = n1 - n2; break; case '*': risposta = n1 * n2; break; case '/': if ((-precisione < n2) && (n2 < precisione)) throw new DivisionePerZeroException(); risposta = n1 / n2; break; default: throw new OpSconosciutaException(op); } return risposta; } public void eseguiCalcoli() throws DivisionePerZeroException, OpSconosciutaException { Scanner tastiera = new Scanner(System.in); boolean fatto = false; risultato = 0; System.out.println("risultato = " + risultato); while (!fatto) { char prossimaOp = (tastiera.next()).charAt(0); if ((prossimaOp == 'f') || (prossimaOp == 'F')) fatto = true; else { double prossimoNumero = tastiera.nextDouble(); risultato = valuta(prossimaOp, risultato, prossimoNumero);

System.out.println("risultato " + prossimaOp + " " + prossimoNumero + " = " + risultato); System.out.println("risultato aggiornato = " + risultato); } } } public static void main(String[] args) { Calcolatrice calc = new Calcolatrice(); try { System.out.println("Calcolatrice attivata."); System.out.print("Formato di ogni linea: "); System.out.println("operatore spazio numero"); System.out.println("Per esempio: + 3"); System.out.println("Per terminare inserire la lettera f."); calc.eseguiCalcoli(); } catch(OpSconosciutaException e) { calc.gestisciOpSconosciutaException(e); } catch(DivisionePerZeroException e) { calc.gestisciDivisionePerZeroException(e); } System.out.println("Il risultato finale e' " + calc.getRisultato()); System.out.println("Fine del programma."); } }