Gli obiettivi di questa esercitazione sono: saper utilizzare e riscrivere il
metodo equals
della classe Object
, saper utilizzare
le eccezioni e le parole riservate try, catch, finally, throw, throws
,
saper utilizzare le classi File, FileInputStream
e FileOutputStream
del package java.io
(capitolo 11 da 11.3 fino a 11.6.2).
Raccomandazioni: Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.
Obiettivo: saper utilizzare e sovrascrivere il metodo equals
della classe Object
.
Attività:
public class PrenotazioneAerea { private String nominativo; private String numeroVolo; private String data; //in formato aaaa/mm/gg private int prezzo; //in euro public PrenotazioneAerea(String nominativo, String numeroVolo, String data, int prezzo) { this.nominativo = nominativo; this.numeroVolo = numeroVolo; this.data = data; this.prezzo = prezzo; } public String toString() { return "*"+nominativo+"*"+numeroVolo+"*"+data+"*"+prezzo+"**"; } }Sovrascrivete (aggiungendolo alla classe
PrenotazioneAerea
) il
metodo boolean equals(Object)
, ereditato dalla classe Object
,
che restituisce true
quando due prenotazioni sono uguali. (Suggerimento:
utilizzate il metodo equals
della classe String
per sapere se due stringhe sono uguali.)UsaPrenotazioneAerea
usando equals
oppure ==
:
public class UsaPrenotazioneAerea { public static void main(String[] args) { String nome; String volo; String data; int prezzo; System.out.print("Inserisci nome "); nome = EasyIn.readString(); System.out.print("Inserisci volo "); volo = EasyIn.readString(); System.out.print("Inserisci data [aaaa/mm/gg] "); data = EasyIn.readString(); System.out.print("Inserisci prezzo [in euro] "); prezzo = EasyIn.readInt(); PrenotazioneAerea p1 = new PrenotazioneAerea(nome,volo,data,prezzo); PrenotazioneAerea p2 = p1; PrenotazioneAerea p3 = new PrenotazioneAerea(nome,volo,data,prezzo*2); PrenotazioneAerea p4 = new PrenotazioneAerea(nome,volo,data,prezzo); if (p1...p2...) System.out.println(p1+" e "+p2+" sono uguali"); else System.out.println(p1+" e "+p2+" sono diversi"); if (p1...p3...) System.out.println(p1+" e "+p3+" sono uguali"); else System.out.println(p1+" e "+p3+" sono diversi"); if (p3...p2...) System.out.println(p3+" e "+p2+" sono uguali"); else System.out.println(p3+" e "+p2+" sono diversi"); if (p1...p4...) System.out.println(p1+" e "+p4+" sono uguali"); else System.out.println(p1+" e "+p4+" sono diversi"); } }
equals
della classe PrenotazioneAerea
per fare in modo che il programma UsaPrenotazioneAerea
possa
stampare quattro messaggi che dicono che le prenotazioni sono uguali.equals
oppure ==
ai puntini di UsaPrenotazioneAerea
per fare in modo che il secondo
messaggio affermi che sono uguali e il terzo che sono diversi.Obiettivo: saper utilizzare le eccezioni.
Attività:
public class EccezionePila extends Exception { public EccezionePila(String s) {super(s);} } class EccezionePilaVuota extends EccezionePila { public EccezionePilaVuota(String s) {super(s);} } class EccezionePilaPiena extends EccezionePila { public EccezionePilaPiena(String s) {super(s);} }Modificate il codice di
PilaInteriLimitata
per fare in modo che
i metodi metti
ed estrai
lancino le opportune eccezioni
invece di stampare messaggi di errore:
public class PilaInteriLimitata { private int[] pila; private int top = 0; public PilaInteriLimitata(int max) { this.pila = new int[max]; } public boolean vuota() {return top <= 0;} public boolean piena() {return top > pila.length-1;} public int estrai() { if (vuota()) { System.out.println("Errore: la pila e' vuota"); return -1; } return pila[(top--)-1]; } public void metti(int x) { if (piena()) { System.out.println("Errore: la pila e' piena"); return; } pila[top++] = x; } }
UsaPilaInteriLimitata
per far catturare
le eccezioni. Il programma (non il TDA) deve stampare messaggi
di errore quando cattura le eccezioni:
public class UsaPilaInteriLimitata { public static void main(String[] args) { PilaInteriLimitata pila = new PilaInteriLimitata(5); for (int i = 0; i<7; i++) pila.metti(i); for (int i = 0; i<7; i++) System.out.println(pila.estrai()); } }
UsaPilaInteriLimitata
per far in
modo che i metodi metti
ed estrai
non usino if
,
ma l'eccezione ArrayIndexOutOfBoundsException
che viene generata
automaticamente dalla JVM se durante l'esecuzione di un programma si tenta
di accedere ad un indice fuori dai limiti di un array.Obiettivo: saper utilizzare le classi File, FileInputStream
e FileOutputStream
del package java.io
.
Attività:
VisualizzaFile
e CopiaFile
a pagina 259. Compilateli ed eseguiteli.VisualizzaFile
per farlo fermare ogni 25 caratteri
e farlo aspettare la pressione del tasto invio.VisualizzaFile
per farlo fermare ogni 5 righe
e farlo aspettare la pressione del tasto invio.Esercizio3
qui di seguito, il metodo
statico void stampaTrama(OutputStream f, int dimensione)
che
stampa una trama di + e o su un FileOutputStream
:
import java.io.*; public class Esercizio3 { public static void main(String[] args) { System.out.print("Inserisci il nome del file "); File f; do { f = new File(EasyIn.readString()); if (f.exists()) System.out.print(f+" esiste gia'. Inserisci il nome di un file nuovo "); } while(f.exists()); try { FileOutputStream fos = new FileOutputStream(f); for (int i=6; i<9; i++) stampaTrama(fos,i); fos.close(); } catch(IOException e) { System.out.println("Errore!\n"+e); } } }La trama è fatta a scacchiera. Ad esempio,
stampaTrama(...,4)
deve stampare
+o+o o+o+ +o+o o+o+
stampaTrama(...,3)
deve stampare
+o+ o+o +o+Suggerimento: se l'indice di riga più l'indice di colonna è pari si deve stampare un carattere, altrimenti l'altro...
FileInpuStreamConRighe
e FileOutputStreamConRighe
che, oltre ad avere tutti i metodi di FileInputStream
e FileOutputStream
,
hanno anche i metodi String leggiRiga()
e void scriviRiga(String)
.