Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica:...

35
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Iterazione 1 Iterazione Capitolo 17 febbraio 2004

Transcript of Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica:...

Page 1: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Fondamenti di informatica Oggetti e Java

Luca Cabibbo

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione1

Iterazione

Capitolo 17febbraio 2004

Page 2: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione2

Accesso a sequenze

I problemi esaminati in questo capitolo hanno lo scopo di accedere ed elaborare delle sequenze

sequenze immesse dall’utente – lette dalla tastiera di lunghezza nota con un metodo che consente di sapere quando è stata

letta completamente di cui è noto l’ultimo elemento o una sua proprietà

sequenze generate con una variabile di controllo sequenze ottenute scandendo gli elementi di una sequenza

con accesso posizionale file di testo

Queste tecniche possono essere applicate anche per altre tipologie di sequenze

array e collezioni

Page 3: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione3

Accumulazione

Accumulazione calcolare una proprietà sintetica (cumulata) da una sequenza

di valori

Tecnica dell’accumulazione una variabile di controllo (accumulatore) una operazione di accumulazione, binaria

Page 4: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione4

Lettura e somma di una sequenza di numeri interi

int numero; // elemento corrente della sequenza int somma; // somma degli elementi della sequenza

/* leggi una sequenza di numeri interi e * calcolane la somma */ /* inizialmente somma vale zero */ somma = 0; /* finché ci sono altri elementi nella sequenza, * leggili e sommali a somma */ while (!Lettore.in.eoln()) { // finché ci sono // altri elementi /* leggi un elemento della sequenza */ numero = Lettore.in.leggiInt(); /* incrementa somma di numero */ somma = somma + numero; } /* visualizza somma */ System.out.println(somma);

Page 5: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione5

Fattoriale di un numero naturale

... calcola il fattoriale f di n ... int f; // il fattoriale di n int i; // per iterare tra 1 e n

/* calcola il fattoriale di n */ f = 1; /* moltiplica f per ogni numero intero i * compreso tra 1 e n */ for (i=1; i<=n; i++) f = f*i; ... il fattoriale di n è f ...

Page 6: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione6

Invarianti di ciclo

In una istruzione ripetitiva, un invariante di ciclo è una proprietà che risulta verificata

ad ogni esecuzione del corpo dell’istruzione ripetitiva in un particolare punto del corpo dell’istruzione ripetitiva

Nel caso della lettura e somma di una sequenza di numeri un invariante di ciclo è che somma è uguale alla somma degli

elementi letti finora dalla tastiera il punto in cui la proprietà risulta verificata ad ogni esecuzione

del corpo dell’istruzione ripetitiva è al termine dell’esecuzione del corpo

Page 7: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione7

Accumulazione

... dichiarazione della variabile accumulatore ... accumulatore = elemento neutro dell’operazione di accumulazione ; ... altre inizializzazioni ...

per ciascun elemento della sequenza { ... accedi al prossimo elemento ... accumulatore = applica l’operazione di accumulazione all’accumulatore e all’elemento corrente ; }

... altre elaborazioni ...

Page 8: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione8

Calcolo di una sottostringa

Scrivere un metodo di classe String sottostringa(String s, int inizio, int fine) che calcola la sottostringa di s che consiste dei caratteri compresi tra quello di posizione inizio e quello di posizione fine-1

sottostringa("automobile", 2, 6) deve restituire "tomo" usa solo le seguenti operazioni sulle stringhe

int length() char charAt() + (concatenazione)

motivazioni accesso posizionale su stringhe

Page 9: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione9

Calcolo di una sottostringa

/* Calcola la sottostringa di s compresa tra i * caratteri di posizione da inizio a fine-1. */ public static String sottostringa(String s, int inizio, int fine) { // pre: s!=null && // inizio>=0 && inizio<=s.length() && // fine>=inizio && fine<=s.length() String ss; // la sottostringa di s tra inizio e fine int i; // indice per la scansione di s

/* calcola la sottostringa, come concatenazione * dei caratteri tra la posizione inizio (inclusa) * e fine (esclusa) */ ss = ""; // la stringa vuota è l'elemento neutro // della concatenazione for (i=inizio; i<fine; i++) ss = ss + s.charAt(i); // concatenazione a destra // e conversione automatica return ss; }

Page 10: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione10

Conteggio

I problemi di conteggio sono un caso particolare dei problemi di accumulazione

l’accumulatore è un contatore l’operazione di accumulazione è un incremento unitario l’aggiornamento deve essere eseguito sempre (conteggio),

oppure condizionatamente (conteggio condizionale) al soddisfacimento di una proprietà da parte dell’elemento corrente della sequenza

Page 11: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione11

Conteggio (condizionale)

int contaProprietà; // numero di elementi che // soddisfano la proprietà contaProprietà = 0; ... altre inizializzazioni ...

per ciascun elemento della sequenza { ... accedi al prossimo elemento ... if (l’elemento corrente soddisfa la proprietà) contaProprietà++; }

... altre elaborazioni ...

Page 12: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione12

Esercizio

Scrivere una applicazione che legge dalla tastiera una sequenza di numeri interi e ne conta e visualizza, separatamente, il numero degli elementi positivi e il numero degli elementi negativi (gli zeri non vanno contati)

Scrivi una sequenza di numeri interi 10 20 0 -10 4 -8 La sequenza contiene 3 elementi positivi e 2 negativi

Page 13: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione13

Verifica esistenziale

I problemi di verifica esistenziale sono un altro caso particolare dei problemi di accumulazione

bisogna determinare se una sequenza di elementi contiene almeno un elemento che soddisfa una certa proprietà

come accumulatore può essere usata una variabile booleana che indica se la sequenza contiene almeno un elemento che soddisfa la proprietà

Page 14: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione14

Verifica se una sequenza contiene almeno uno zero

... legge una sequenza di numeri interi e verifica se contiene almeno uno zero ... int numero; // elemento corrente della sequenza boolean contieneZero; // la sequenza contiene almeno // un elemento uguale a zero

... visualizza un messaggio ... /* legge la sequenza e verifica * se contiene almeno uno zero */ contieneZero = false; while (!Lettore.in.eoln()) { /* legge il prossimo elemento della sequenza */ numero = Lettore.in.leggiInt(); /* se numero vale zero, allora la sequenza * contiene almeno uno zero */ if (numero==0) contieneZero = true; } ... il risultato è contieneZero ...

Page 15: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione15

Verifica esistenziale

int contieneProprietà; // almeno un elemento // soddisfa la proprietà contieneProprietà = false; ... altre inizializzazioni ...

per ciascun elemento della sequenza { ... accedi al prossimo elemento ... if (l’elemento corrente soddisfa la proprietà) contieneProprietà = true; }

... altre elaborazioni ...

Page 16: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione16

Un errore comune

Un errore comune nella verifica esistenziale

contieneZero = false; while (!Lettore.in.eoln()) { /* legge il prossimo elemento della sequenza */ numero = Lettore.in.leggiInt(); /* se numero vale zero, allora la sequenza * contiene almeno uno zero */ if (numero==0) contieneZero = true; else contieneZero = false; }

Page 17: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione17

Verifica universale

Un problema di verifica universale consiste nel verificare se tutti gli elementi di una sequenza soddisfano una certa proprietà

una variante (duale) dei problemi di verifica esistenziale

Page 18: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione18

Verifica se una sequenza di dieci elementi è crescente

... legge una sequenza di dieci numeri interi e verifica se è crescente ... int numero; // elemento corrente della sequenza int precedente; // elemento che precede numero // nella sequenza int i; // per contare i numeri letti boolean crescente; // la sequenza è crescente

/* il primo elemento della sequenza è il * precedente del prossimo che sarà letto */ precedente = Lettore.in.leggiInt(); /* finora la sequenza letta è crescente */ crescente = true; /* legge e elabora gli altri elementi della sequenza */ for (i=1; i<10; i++) { /* legge il prossimo numero e verifica che * la sequenza sia ancora crescente */ numero = Lettore.in.leggiInt(); if (precedente>=numero) crescente = false; /* prepara la prossima iterazione */ precedente = numero; } ... il risultato della verifica è crescente ...

Page 19: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione19

Verifica l’uguaglianza tra stringhe

Scrivere un metodo boolean uguali(String s, String t) che verifica se le stringhe s e t sono uguali

uguali("alfa", "alfa") deve restituire true, mentre uguali("alfa", "beta") deve restituire false

due stringhe s e t sono uguali se s e t hanno la stessa lunghezza ciascun carattere della stringa s è uguale al carattere della

stringa t che occupa la stessa posizione

Page 20: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione20

Uguaglianza tra stringhe

/* Verifica se le stringhe s e t sono uguali. */ public static boolean uguali(String s, String t) { // pre: s!=null && t!=null boolean uguali; // s e t sono uguali int i; // indice per la scansione di s e t

/* verifica se s e t sono uguali */ if (s.length()==t.length()) { /* s e t hanno la stessa lunghezza: s e t /* possono essere uguali, ma sono diverse * se contengono almeno un carattere diverso */ uguali = true; for (i=0; i<s.length(); i++) if (s.charAt(i) != t.charAt(i)) uguali = false; } else /* s e t hanno lunghezza diversa, * e quindi sono diverse */ uguali = false; return uguali; }

Page 21: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione21

Uguaglianza tra stringhe

Una variante

/* verifica se s e t sono uguali */ if (s.length()==t.length()) { /* s e t hanno la stessa lunghezza: s e t /* possono essere uguali, ma sono diverse * se contengono almeno un carattere diverso */ uguali = true; for (i=0; uguali && i<s.length(); i++) if (s.charAt(i) != t.charAt(i)) uguali = false; } else /* s e t hanno lunghezza diversa, * e quindi sono diverse */ uguali = false;

Page 22: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione22

Verifica universale

int tuttiProprietà; // tutti gli elementi // soddisfano la proprietà tuttiProprietà = true; ... altre inizializzazioni ...

per ciascun elemento della sequenza { ... accedi al prossimo elemento ... if (l’elemento corrente non soddisfa la proprietà) tuttiProprietà = false; }

... altre elaborazioni ...

Page 23: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione23

Ricerca

I problemi di ricerca sono un caso più generale dei problemi di verifica esistenziale

bisogna verificare se una sequenza contiene almeno un elemento che soddisfa una certa proprietà

in caso affermativo, bisogna calcolare delle ulteriori informazioni circa uno degli elementi che soddisfa la proprietà

Page 24: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione24

Indice di un carattere in una stringa

Scrivere un metodo int posizioneDi(String s, char car) che verifica se la stringa s contiene almeno un carattere uguale a

car restituisce la posizione della prima occorrenza del carattere

car nella stringa s oppure il valore -1 posizioneDi("alfa", 'f') deve restituire 2,

posizioneDi("alfa", 'a') deve restituire 1, mentre posizioneDi("alfa", 'b') deve restituire -1

Page 25: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione25

Indice di un carattere in una stringa

/* Verifica se la stringa s contiene il carattere car, * restituisce la posizione della prima * occorrenza di car in s, oppure -1. */ public static int posizioneDi(String s, char car) { // pre: s!=null int posizione; // posizione di car in s int i; // indice per la scansione di s

/* scandisce i caratteri di s alla ricerca della * prima occorrenza di car in s */ /* finora non è stata trovato nessun car in s */ posizione = -1; for (i=0; posizione==-1 && i<s.length(); i++) { if (s.charAt(i)==car) /* è stato trovato car in posizione i */ posizione = i; } return posizione; }

Page 26: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione26

Ricerca

... info; // informazione associata // all’elemento cercato info = informazione non trovata ; ... altre inizializzazioni ...

per ciascun elemento della sequenza { ... accedi al prossimo elemento ... if (l’elemento corrente soddisfa la proprietà) info = informazione associata all’elemento corrente ; }

... altre elaborazioni ...

Page 27: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione27

Indice di una sottostringa in una stringa

Scrivere un metodo int posizioneDi(String s, String t) che verifica se la stringa s contiene almeno una sottostringa

uguale alla stringa t restituisce la posizione in cui inizia la prima sottostringa di s

uguale a t oppure -1 posizioneDi("sottostringa", "otto") deve restituire 1,

posizioneDi("mamma", "ma") deve restituire 0, mentre posizioneDi("mamma", "pa") deve restituire -1

Page 28: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione28

Indice di una sottostringa in una stringa

/* Verifica se la stringa s contiene la sottostringa t * e restituisce la posizione della prima * occorrenza di t in s, oppure -1. */ public static int posizioneDi(String s, String t) { // pre: s!=null && t!=null int posizione; // posizione della sottostringa t in s int ls, lt; // lunghezza di s e lunghezza di t int i; // indice per la scansione // delle sottostringhe di s int j; // indice per la scansione di t boolean ssug; // la sottostringa di s che inizia in // i ed ha lunghezza lt è uguale a t

... segue ...

Page 29: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione29

Indice di una sottostringa in una stringa

/* inizializzazioni */ ls = s.length(); lt = t.length();

/* scandisce le sottostringhe di s * alla ricerca di una sottostringa uguale a t */ posizione = -1; for (i=0; posizione==-1 && i<=ls-lt; i++) { /* scandisce i caratteri di t per verificare * se la sottostringa di s iniziante * in posizione i e lunga lt è uguale a t */ ssug = true; for (j=0; ssug && j<lt; j++) if (s.charAt(i+j) != t.charAt(j)) ssug = false; if (ssug) // sottostringa di s uguale a t trovata posizione = i; // allora t è sottostringa di s } return posizione; }

Page 30: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione30

Un’altra soluzione

public static int posizioneDi(String s, String t) { // pre: s!=null && t!=null int posizione; // posizione della sottostringa t in s int ls, lt; // lunghezza di s e lunghezza di t int i; // indice per la scansione // delle sottostringhe di s

/* inizializzazioni */ ls = s.length(); lt = t.length();

/* scandisce le sottostringhe di s alla ricerca di * una sottostringa uguale a t */ posizione = -1; for (i=0; posizione==-1 && i<=ls-lt; i++) { if ( uguali(sottostringa(s,i,i+lt), t) ) posizione = i; } return posizione; }

Page 31: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione31

File di testo

Un file di testo è un documento che può essere generato da un editor di testi

un file di testo è una sequenza di linee una linea è una sequenza di caratteri

La classe Lettore del package fiji.io permette di leggere i file di testo

è possibile creare un oggetto Lettore per leggere da un file di testo mediante il costruttore Lettore(FileReader f)

un oggetto FileReader può essere creato usando il costruttore FileReader(String nomefile)

è possibile chiedere a un oggetto Lettore di leggere una linea del file mediante il metodo String leggiLinea()

è possibile chiedere a un oggetto Lettore se è stato letto tutto il file che rappresenta mediante il metodo boolean eof()

è possibile usare anche i metodi char leggiChar() e boolean eoln()

Page 32: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione32

Lettura e visualizzazione di un file di testo

import fiji.io.*; import java.io.*; // per FileReader e IOException /** Visualizza sullo schermo il contenuto * del file di testo "lettura.txt". */ class LetturaFileDiTesto { public static void main(String[] args) throws IOException { ... codice dell'applicazione ... } }

La clausola throws dichiara che il metodo è consapevole che durante la sua esecuzione possono verificarsi situazioni anomale

Page 33: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione33

Lettura e visualizzazione di un file di testo

final String NOME_FILE = "lettura.txt"; Lettore fin; // per leggere dal file String linea; // una linea di testo

/* crea un oggetto Lettore per leggere * dal file di nome NOME_FILE */ fin = new Lettore(new FileReader(NOME_FILE)); /* scandisce fin, riga per riga */ while (!fin.eof()) { // finché ci sono altre linee da leggere /* legge una linea e la visualizza */ linea = fin.leggiLinea(); System.out.println(linea); }

Page 34: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione34

Lettura e visualizzazione, carattere per carattere

final String NOME_FILE = "lettura.txt"; Lettore fin; // per leggere dal file char car; // il carattere corrente

/* crea un oggetto Lettore per leggere * dal file di nome NOME_FILE */ fin = new Lettore(new FileReader(NOME_FILE)); /* scandisce fin, riga per riga */ while (!fin.eof()) { // per ogni linea /* scandisce una riga di fin */ while (!fin.eoln()) { // per ogni carattere /* legge un carattere e lo visualizza */ car = fin.leggiChar(); System.out.print(car); } /* "consuma" il terminatore di linea, preparando * la lettura della linea successiva */ fin.leggiLinea(); /* va a capo nella visualizzazione */ System.out.println(); }

Page 35: Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java

Copyright © 2004 – The McGraw-Hill Companies srl

Iterazione35

Scrittura di un file di testo

final String NOME_FILE = "scrittura.txt"; PrintWriter fout; // per scrivere sul file

/* crea un oggetto PrintWriter per scrivere * sul file di nome NOME_FILE */ fout = new PrintWriter(new FileWriter(NOME_FILE)); /* un oggetto PrintWriter sa eseguire le stesse * operazioni di System.out */

/* scrive due linee di testo sul file */ fout.println("Una linea"); fout.println("Un'altra linea");

/* conclude la scrittura su file */ fout.close();