import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Scanner; import java.io.*; /** * Classe di test per la gestione delle eccezioni. *
* Deve contenere: * un metodo statico calcolaMedia: Il metodo deve leggere 3 interi da input e calcolarne la media. * Se l'utente non inserisce esattamente 3 numeri il metodo deve generare una IllegalArgumentException *
* Un metodo statico confrontaMedia: utilizza calcolaMedia, per calcolare due medie. Il metodo stampa la media piu' alta. Il metodo deve gestire l'eccezione solevata da calcola media *
* Un metodo statico calcolaMediaFile(String file) che opera come calcola media ma legge i dati da file. Il metodo deve sollevare delegare la gestione di tutte le eccezioni. *
* Un metodo statico confrontaMediaFile(String file1, String file2) che utilizza calcolaMediaFile, per calcolare due medie. Il metodo stampa la media piu' alta. Il metodo deve gestire le eccezioni solevate da calcola media * * @author Alessandro * * */ public class Test { /** * Calcola la media di tre interi letti da input TRAMITE UN CICLO WHILE * * @throws IllegalArgumentException se i numeri immessi non sono 3 * @return la media calcolata * */ public static double calcolaMedia() throws IllegalArgumentException{ System.out.println("metodo da implementare"); return -1; } /** * Confronta due medie lette da input e stampa la piu' alta * Deve usare calcolaMedia() e gestire le eccezioni sollevate * da calcolaMedia() * * */ private static void confrontaMedia() { System.out.println("metodo da implementare"); } /** * Calcola la media di tre interi letti da file * Leggere gli interi tramite un ciclo while * * @exception genera IllegalArgumentException se i numeri immessi non sono 3 * @param file nome del file da cui leggere * @return la media calcolata * @throws IOException * */ public static double calcolaMediaFile(String file) throws IllegalArgumentException, IOException{ System.out.println("metodo da implementare"); return -1.; } /** * Confronta due medie lette da file e stampa la piu' alta * Deve gestire le eccezioni sollevate da calcolaMediaFile(...) * * @param file1 file da cui leggere la prima media * @param file2 file da cui leggere la seconda media * */ private static void confrontaMediaFile(String file1, String file2) { System.out.println("metodo da implementare"); } /** * Metodo di esempio per la gestione delle eccezioni * Legge il file "input.txt" assumendo che ogni linea contenga un * intero e scrive sul file "output.txt" il quadrato dell'intero letto. * Grazie al blocco try {...} catch (...) {...} il metodo continua * a funzionare anche se una linea del file contiene un valore non * intero (i.e., un carattere) */ public static void esempioGestione() throws IOException { FileReader fr = new FileReader("input.txt"); BufferedReader br = new BufferedReader(fr); FileWriter fw = new FileWriter("output.txt"); PrintWriter pw = new PrintWriter(fw); String line = br.readLine(); while(line!=null){ try{ int a = Integer.valueOf(line); System.out.println(Math.sqrt(a)); pw.println(a*a); } catch (IllegalArgumentException e){//salta al prossimo valore se leggiamo un argomento non valido System.out.println("not a valid integer: "+e.getMessage()); } line = br.readLine(); } System.out.println("file closed"); br.close(); pw.close(); } /** * Metodo di esempio per finally * Legge il file "input.txt" assumendo che ogni linea contenga un * intero e scrive sul file "output.txt" il quadrato dell'intero letto. * Se una linea del file contiene un valore non intero * (e.g., un carattere) il blocco try{...} passera' il controllo al * blocco catch(...){...} che lancia una eccezione. * Senza il blocco finally il file non verrebbe chiuso. * */ public static void esempioFinally() throws IOException,IllegalArgumentException { FileReader fr = new FileReader("input.txt"); BufferedReader br = new BufferedReader(fr); FileWriter fw = new FileWriter("output.txt"); PrintWriter pw = new PrintWriter(fw); try{ String line = br.readLine(); while(line!=null){ int a = Integer.valueOf(line); System.out.println(a*a); pw.println(a*a); line = br.readLine(); } } catch (Exception e){ System.out.println("not an integer"); throw new IllegalArgumentException(e); //se rimosso viene eseguito il codice seguente (anche senza finally) } finally { //se rimosso il file non viene chiuso perche' viene lanciata un'eccezione nel blocco catch System.out.println("file closed"); br.close(); pw.close(); } } public static void main(String[] args) throws Exception{ System.out.println("Eseguo calcola media"); calcolaMedia(); System.out.println("Eseguo confronta media"); confrontaMedia(); System.out.println("Eseguo calcola media file"); calcolaMediaFile("media1.txt"); System.out.println("Eseguo confronta media file"); confrontaMediaFile("media1.txt", "media2.txt"); System.out.println("Eseguo esempioFinally"); try { esempioFinally(); } catch (IllegalArgumentException e){ System.out.println("Exception: "+e.getMessage()); } System.out.println("Eseguo esempioGestione"); esempioGestione(); } }