Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono...

22
Fisica computazionale I - 2 1 OPERATORI O peratore O perando Descrizione ++, -- aritmetico increm ento, decrem ento +, - aritmetico addizione, sottrazione *, / aritmetico m oltiplicazione, divisione + String concatenazione ==, != primitivo uguaglianza, disuguaglianza di valore ==, != oggetto uguaglianza, disuguaglianza di classe && booleano AND || booleano OR = qualunque assegnazione

Transcript of Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono...

Page 1: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 1

OPERATORI

Operatore Operando Descrizione

++, - - aritmetico incremento, decremento

+, - aritmetico addizione, sottrazione

*, / aritmetico moltiplicazione, divisione

+ String concatenazione

==, != primitivo uguaglianza, disuguaglianza di valore

==, != oggetto uguaglianza, disuguaglianza di classe

&& booleano AND

|| booleano OR

= qualunque assegnazione

Page 2: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 2

OGGETTI

Gli oggetti sono strutture di dati che possono essere Gli oggetti sono strutture di dati che possono essere create, attraverso la definizione di un riferimento. create, attraverso la definizione di un riferimento.

Una volta costruito l'oggetto di riferimento, e' possibile Una volta costruito l'oggetto di riferimento, e' possibile in modo semplice costruire piu' copie di qell'oggetto ed in modo semplice costruire piu' copie di qell'oggetto ed utilizzarle, in un certo senso, come se si trattasse di utilizzarle, in un certo senso, come se si trattasse di nuovi tipi. nuovi tipi.

Page 3: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 3

L’oggetto “Libro”

public class Libro{ public class Libro{ String autore; String autore; String titolo; String titolo; double prezzo; double prezzo; public Libro(String a, String t, double p) public Libro(String a, String t, double p) { { autore = a; autore = a; titolo = t; titolo = t; prezzo = p; prezzo = p; } } public String getAutore() public String getAutore() { return autore; } { return autore; } public String getTitolo() public String getTitolo() { return titolo; } { return titolo; } public String getPrezzo() public String getPrezzo() { return prezzo; } { return prezzo; }

} }

Page 4: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 4

Come usare l’oggetto “Libro”

compiliamo con il comando javac questo programma. Avremo ora a compiliamo con il comando javac questo programma. Avremo ora a disposizione l'oggetto Libro, e qualunque nostro programma potra' disposizione l'oggetto Libro, e qualunque nostro programma potra' utilizzarlo. utilizzarlo. Potremo scrivere, all'interno del nostro programma: Potremo scrivere, all'interno del nostro programma:

Libro libro1 = new Libro("Giovanni Rossi", "Le mie memorie", Libro libro1 = new Libro("Giovanni Rossi", "Le mie memorie", 57.00); 57.00); Libro libro2 = new Libro("Mario Bianchi", "Viaggio in Turchia", Libro libro2 = new Libro("Mario Bianchi", "Viaggio in Turchia", 35.00); 35.00);

Abbiamo cioe' creato due copie dell'oggetto Libro, caratterizzate Abbiamo cioe' creato due copie dell'oggetto Libro, caratterizzate ciascuna da un titolo, un autore, un prezzo. In termini piu' corretti ciascuna da un titolo, un autore, un prezzo. In termini piu' corretti abbiamo create due differenti 'istanze' della 'classe' Libro. abbiamo create due differenti 'istanze' della 'classe' Libro. In seguito, potremo ritrovare le caratteristiche di ogni libro, con In seguito, potremo ritrovare le caratteristiche di ogni libro, con chiamate ai metodi di quell'oggetto, ovvero di quella classe chiamate ai metodi di quell'oggetto, ovvero di quella classe

double pp1 = libro1.getPrezzo(); double pp1 = libro1.getPrezzo(); double pp2 = libro2.getPrezzo(); double pp2 = libro2.getPrezzo(); String autore1 = libro1.getAutore();String autore1 = libro1.getAutore();

Page 5: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 5

Costruire meglio un oggetto

Un oggetto puo' avere piu' costruttori, distinti per numero e Un oggetto puo' avere piu' costruttori, distinti per numero e qualita' degli argomenti. E' buona norma che un oggetto abbia qualita' degli argomenti. E' buona norma che un oggetto abbia anche un costruttore di default, cioe' senza argomenti:anche un costruttore di default, cioe' senza argomenti:

public Libro() { } public Libro() { } E' anche buona norma che l'oggetto abbia dei metodi per E' anche buona norma che l'oggetto abbia dei metodi per

fissare i valori di ogni campo, per esempio:fissare i valori di ogni campo, per esempio: public void setAutore(String a) public void setAutore(String a) { { autore = a; autore = a; } }

Il nostro oggetto quindi sarebbe meglio costruito dal seguente Il nostro oggetto quindi sarebbe meglio costruito dal seguente codice: codice:

Page 6: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 6

Costruire un oggetto

Un Un oggettooggetto e' in generale caratterizzato da e' in generale caratterizzato da:: - una serie di campi, fields in inglese, nel nostro esempio - una serie di campi, fields in inglese, nel nostro esempio

abbiamo autore, titolo, prezzo;abbiamo autore, titolo, prezzo;

- un 'costruttore': e' il blocco di codice- un 'costruttore': e' il blocco di codice:: public Libro(String a, String t, double p) public Libro(String a, String t, double p)

{ { autore = a; autore = a; titolo = t; titolo = t; prezzo = p; prezzo = p; } }

- una serie di metodi. - una serie di metodi.

Page 7: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 7

L’oggetto Libro definito meglio

public class Libro{ public class Libro{ String autore; String autore; String titolo; String titolo; double prezzo; double prezzo; public Libro(){ } public Libro(){ } public Libro(String a, String t,doublepublic Libro(String a, String t,double p) p) {{

autore = a; autore = a; titolo = t; titolo = t; prezzo = p; prezzo = p; } } public String getAutore() { return autore; } public String getAutore() { return autore; } public String getTitolo() { return titolo; } public String getTitolo() { return titolo; } public double getPrezzo() { return prezzo; } public double getPrezzo() { return prezzo; } public void setAutore(String a){ autore = a;} public void setAutore(String a){ autore = a;} public void setTitolo(String a){ titolo = a;} public void setTitolo(String a){ titolo = a;} public void setPrezzo(double b){ prezzo = b;} public void setPrezzo(double b){ prezzo = b;} }}

Page 8: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 8

Usare l’oggetto Libro

Adesso potremo definire un nuovo libro, all'interno del Adesso potremo definire un nuovo libro, all'interno del nostro programma, anche nel seguente modo:nostro programma, anche nel seguente modo:

Libro ilMioLibro = new Libro(); Libro ilMioLibro = new Libro(); ilMioLibro.setAutore("Mario Rossi"); ilMioLibro.setAutore("Mario Rossi"); ilMioLibro.setTitolo("Manuale di Java"); ilMioLibro.setTitolo("Manuale di Java"); ilMioLibro.setPrezzo(75.44); ilMioLibro.setPrezzo(75.44);

Si noti che i campi (autore, titolo, prezzo) sono definiti Si noti che i campi (autore, titolo, prezzo) sono definiti esternamente ai metodi. Cio' vuol dire che le relative esternamente ai metodi. Cio' vuol dire che le relative variabili sono comuni e visibili a tutti i metodi. In variabili sono comuni e visibili a tutti i metodi. In sostanza i campi, nel loro insieme caratterizzano sostanza i campi, nel loro insieme caratterizzano l'oggetto libro e rendono ogni esemplare diverso da un l'oggetto libro e rendono ogni esemplare diverso da un altro. Questi campi costituiscono le variabili di 'istanza', altro. Questi campi costituiscono le variabili di 'istanza', nel senso che ogni istanza della classe ha un preciso nel senso che ogni istanza della classe ha un preciso insieme di valori. insieme di valori.

Page 9: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 9

Si noti che il codice che abbiamo scritto per definire la Si noti che il codice che abbiamo scritto per definire la classe Libro non contiene il metodo main; questo classe Libro non contiene il metodo main; questo perche' intendiamo utilizzarlo non come applicazione perche' intendiamo utilizzarlo non come applicazione isolata, ma come una definizione che utilizzeremo isolata, ma come una definizione che utilizzeremo nell'ambito di altre applicazioni. In sostanza il codice nell'ambito di altre applicazioni. In sostanza il codice definisce un nuovo 'tipo' di oggetti (una 'classe') che definisce un nuovo 'tipo' di oggetti (una 'classe') che potremo utilizzare tutte le volte che ne abbiamo potremo utilizzare tutte le volte che ne abbiamo bisogno. bisogno.

Potremo poi costruire 'collezioni' di oggetti. Restando Potremo poi costruire 'collezioni' di oggetti. Restando nel campo librario, e' facile immaginare che ci fara' nel campo librario, e' facile immaginare che ci fara' comodo costruire una 'Libreria' intesa come raccolta di comodo costruire una 'Libreria' intesa come raccolta di 'Libri'; ma anche costruire 'collezioni' di oggetti 'Libri'; ma anche costruire 'collezioni' di oggetti eterogenei: l'esempio piu' classico e' il famoso 'carrello' eterogenei: l'esempio piu' classico e' il famoso 'carrello' dei siti web che vendono merci varie via internet.dei siti web che vendono merci varie via internet.

Page 10: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 10

A A volte ci sono situazioni in cui, durante l'esecuzione, dobbiamo volte ci sono situazioni in cui, durante l'esecuzione, dobbiamo verificare a quale classe appartiene uno specifico oggetto. Ci verificare a quale classe appartiene uno specifico oggetto. Ci sono vari modi per farlo. Uno dei piu' semplici utilizza sono vari modi per farlo. Uno dei piu' semplici utilizza l'operatore l'operatore instanceofinstanceof. . Esempio:Esempio:

boolean b; boolean b; b = (ilmioLibro instanceof Libro);b = (ilmioLibro instanceof Libro);

se ilmioLibro e' effettivamente una istanza della classe Libro, la se ilmioLibro e' effettivamente una istanza della classe Libro, la variabile b assume il valore true, altrimenti b assume il valore variabile b assume il valore true, altrimenti b assume il valore false. false. Gli oggetti possono essere dichiarati ed inizializzati, all'interno Gli oggetti possono essere dichiarati ed inizializzati, all'interno di un programma, in modo del tutto simile ai tipi primitivi:di un programma, in modo del tutto simile ai tipi primitivi:

IlMioOggetto ogg; IlMioOggetto ogg;

ogg = new IlMioOggetto();ogg = new IlMioOggetto();

Un oggetto non inizializzato assume per default il valore null; in Un oggetto non inizializzato assume per default il valore null; in sostanza, per ogni classe, esiste l'elemento null, che sostanza, per ogni classe, esiste l'elemento null, che rappresenta appunto l'istanza di default di quella classe. rappresenta appunto l'istanza di default di quella classe. Il tentativo di usare un oggetto con valore null provoca un errore Il tentativo di usare un oggetto con valore null provoca un errore al momento dell'esecuzione.al momento dell'esecuzione.

Page 11: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 11

ECCEZIONI

Durante l'esecuzione di un programma si possono verificare Durante l'esecuzione di un programma si possono verificare delle condizioni di errore che portano ad una interruzione della delle condizioni di errore che portano ad una interruzione della esecuzione.esecuzione.

Java fornisce un semplice meccanismo per gestire, in fase di Java fornisce un semplice meccanismo per gestire, in fase di esecuzione, le condizioni di errore, ed evitare che il programma esecuzione, le condizioni di errore, ed evitare che il programma abortisca malamente.abortisca malamente.

try { try { ............ ............ ............ ............ ............ ............ } } catch(Exceptioncatch(Exception e) e) { { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . } }

Page 12: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 12

Viene eseguito il blocco di codice che segue l'istruzione try: se Viene eseguito il blocco di codice che segue l'istruzione try: se durante l'esecuzione si verifica una condizione di errore durante l'esecuzione si verifica una condizione di errore l'esecuzione viene interrotta e si passa ad eseguire il blocco di l'esecuzione viene interrotta e si passa ad eseguire il blocco di codice che segue l'istruzione catch. Successivamente, si continua codice che segue l'istruzione catch. Successivamente, si continua con il codice che segue. con il codice che segue.

try { try { . . . . . . . . . . . . . . . . . . . . } } catch(Exception e) { System.out.println("Errore: ........."); } catch(Exception e) { System.out.println("Errore: ........."); }

ExceptionException e' una vera e propria classe nel senso usuale del e' una vera e propria classe nel senso usuale del termine in Java; quindi la scrittura termine in Java; quindi la scrittura catch(Exception e)catch(Exception e) significa che, in caso di errore, viene creata l'istanza significa che, in caso di errore, viene creata l'istanza e e della della classe classe ExceptionException. Potremo quindi utilizzare tutti i metodi della . Potremo quindi utilizzare tutti i metodi della classe Exception: in particolare, esiste il metodo classe Exception: in particolare, esiste il metodo printStackTrace()printStackTrace() che ci consente di localizzare esattamente in che ci consente di localizzare esattamente in quale istruzione si e' verificata l'eccezione quale istruzione si e' verificata l'eccezione

try { try { . . . . . . . . . . . . . . . . . . . . } } catch(Exception ex) { ex.printStackTrace();} catch(Exception ex) { ex.printStackTrace();}

Page 13: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 13

La classe La classe ExceptionException comprende varie sottoclassi, specializzate comprende varie sottoclassi, specializzate nel gestire le possibili differenti cause di errore. Tuttavia non nel gestire le possibili differenti cause di errore. Tuttavia non e' realistico pensare di poter gestire tutte le possibili cause di e' realistico pensare di poter gestire tutte le possibili cause di errore in tutte le situazioni. Quindi le Exceptions Java si errore in tutte le situazioni. Quindi le Exceptions Java si dividono in due categorie: checked e unchecked. Le Exceptions dividono in due categorie: checked e unchecked. Le Exceptions checked sono quelle che richiedono obbligatoriamente di checked sono quelle che richiedono obbligatoriamente di essere gestite (per esempio attraverso la clausola try/catch). essere gestite (per esempio attraverso la clausola try/catch). Ovvero, in alternativa, e' possibile utilizzare la speciale Ovvero, in alternativa, e' possibile utilizzare la speciale clausola throws nella dichiarazione del metodo entro cui clausola throws nella dichiarazione del metodo entro cui questo problema potrebbe verificarsi. Per esempio: questo problema potrebbe verificarsi. Per esempio:

void readFile(String s) throws IOExceptionvoid readFile(String s) throws IOException

{ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

} }

in questo caso le eccezioni della sottoclasse IOException in questo caso le eccezioni della sottoclasse IOException verranno ignorate.verranno ignorate.

Page 14: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 14

Ignorare una eccezione e' naturalmente delicato: lo si Ignorare una eccezione e' naturalmente delicato: lo si puo' fare solo quando si e' veramente sicuri di cio' che puo' fare solo quando si e' veramente sicuri di cio' che avverra' in conseguenza di questa omissione. E' quindi avverra' in conseguenza di questa omissione. E' quindi piu' prudente, almeno per un principiante, gestire il piu' prudente, almeno per un principiante, gestire il problema con la clausola try/catch.problema con la clausola try/catch.Questo discorso puo' per il momento apparire molto Questo discorso puo' per il momento apparire molto complicato. Lo capiremo meglio in seguito. Per il complicato. Lo capiremo meglio in seguito. Per il momento ci faremo aiutare dal compilatore: se avremo momento ci faremo aiutare dal compilatore: se avremo omesso di gestire correttamente una eccezione esso ci omesso di gestire correttamente una eccezione esso ci indirizzera' con un messaggio tipo indirizzera' con un messaggio tipo

... unreported exception java.xxx.yyyException; must be ... unreported exception java.xxx.yyyException; must be caught or declared to be thrown...... caught or declared to be thrown......

esso ci fara' capire quale istruzione deve essere esso ci fara' capire quale istruzione deve essere protetta dalla clausola try/catch. protetta dalla clausola try/catch. Ci sono poi eccezioni unchecked: non siamo obbligati a Ci sono poi eccezioni unchecked: non siamo obbligati a gestirle, anche se siamo liberi di farlo, se lo riteniamo gestirle, anche se siamo liberi di farlo, se lo riteniamo opportuno. opportuno.

Page 15: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 15

ARRAYS

Un array e' un particolare tipo di oggetto in grado di contenere Un array e' un particolare tipo di oggetto in grado di contenere una collezione ordinata di elementi. Java supporta arrays di una collezione ordinata di elementi. Java supporta arrays di tutti i tipi primitivi ma anche di tutti gli oggetti. Gli arrays sono tutti i tipi primitivi ma anche di tutti gli oggetti. Gli arrays sono denotati dalle parentesi quadre []. Esempio denotati dalle parentesi quadre []. Esempio

int[int[ ] gg; ] gg; String[String[ ] aa; ] aa;

definisce un array di interi gg ed un array di String aa. E' definisce un array di interi gg ed un array di String aa. E' anche possibile mettere le parentesi quadre dopo il nome anche possibile mettere le parentesi quadre dopo il nome dell'array: dell'array:

int gg[int gg[ ]; ];

String aa[String aa[ ]; ]; Per ora abbiamo semplicemente dichiarato che gg e aa sono Per ora abbiamo semplicemente dichiarato che gg e aa sono

varabili di tipo array. Ora possiamo varabili di tipo array. Ora possiamo inizializzare inizializzare questi arraysquesti arrays::

gg = new int[40]; gg = new int[40]; aa = new String[25];aa = new String[25];

Page 16: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 16

Gli indici degli arrays cominciano da zero, come in C. Gli indici degli arrays cominciano da zero, come in C. Quindi il primo elemento di gg e' gg[0] e l'ultimo Quindi il primo elemento di gg e' gg[0] e l'ultimo gg[39]. Ovviamente possiamo combinare insieme la gg[39]. Ovviamente possiamo combinare insieme la dichiarazione e la dichiarazione e la inizializzazioneinizializzazione dell'array dell'array::

int[] gg = new int[40]; int[] gg = new int[40];

La dimensione di un array e' disponibile nella variabileLa dimensione di un array e' disponibile nella variabile::

length int[] gg = new int[40]; length int[] gg = new int[40];

int len = gg.length; int len = gg.length;

si noti che length e' un campo, non un metodo; si noti che length e' un campo, non un metodo;

Page 17: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 17

Se si cercasse di accedere ad un elemento al di fuori Se si cercasse di accedere ad un elemento al di fuori della dimensione dell'array si avrebbe un errore (in della dimensione dell'array si avrebbe un errore (in fase di esecuzione) fase di esecuzione) ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException. .

int[int[ ] gg = new int[40]; ] gg = new int[40]; . . . . . . . . . . . . . . . . . . . . . . . . int a = gg[43]; // errore: indice fuori delle dimensioni int a = gg[43]; // errore: indice fuori delle dimensioni

Questa Questa ExceptionException appartiene alle appartiene alle RunTimeExceptionRunTimeException; ; quindi puo' essere ignorata, se si non ci si aspetta che quindi puo' essere ignorata, se si non ci si aspetta che avvenga, oppure gestita con il costrutto avvenga, oppure gestita con il costrutto try/catchtry/catch. .

Page 18: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 18

Possiamo a questo punto comprendere finalmente il Possiamo a questo punto comprendere finalmente il significato della scrittura cha abbiamo finora significato della scrittura cha abbiamo finora utilizzato nel costruire il metodo main delle nostre utilizzato nel costruire il metodo main delle nostre applicazioni:applicazioni:

public static void main(String argv[])public static void main(String argv[])

il metodo main vuole come argomento una array, di il metodo main vuole come argomento una array, di lunghezza indefinita, di tipo String, che viene lunghezza indefinita, di tipo String, che viene utilizzata per inserire dei parametri attraverso la utilizzata per inserire dei parametri attraverso la riga di comando. Il numero di parametri che possono riga di comando. Il numero di parametri che possono essere inseriti e'indefinito.essere inseriti e'indefinito.

Page 19: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 19

public class Leggipublic class Leggi{{ public static void main(String argv[])public static void main(String argv[]) {{ String a1 = argv[0];String a1 = argv[0]; String a2 = argv[1];String a2 = argv[1]; System.out.println("Parametri letti " + a1 + " " + a2);System.out.println("Parametri letti " + a1 + " " + a2); }}}}

Questo programma legge due parametri dalla riga di comando.Questo programma legge due parametri dalla riga di comando.Si aspetta percio' di trovare due stringhe, dopo il nomeSi aspetta percio' di trovare due stringhe, dopo il nomedel programma; la riga di comando sara': del programma; la riga di comando sara':

java Leggi "Prima stringa" "Seconda stringa“java Leggi "Prima stringa" "Seconda stringa“

Si noti che se non diamo al programma due stringhe da Si noti che se non diamo al programma due stringhe da leggere, si ha un errore in esecuzione leggere, si ha un errore in esecuzione ArrayIndexOutOfBoundsException: un programma ben fatto ArrayIndexOutOfBoundsException: un programma ben fatto dovrebbe gestire correttamente (con un costrutto try/catch) dovrebbe gestire correttamente (con un costrutto try/catch) questa possibilita'.questa possibilita'.

Page 20: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 20

ARRAYS MULTIDIMENSIONALI

E' possibile creare arrays multidimensionali in maniera E' possibile creare arrays multidimensionali in maniera analoga a quanto abbiamo visto in precedenza analoga a quanto abbiamo visto in precedenza

String[String[ ][][ ] aa = new String[10][10]; ] aa = new String[10][10];

crea un array aa con dimesioni 10x10. crea un array aa con dimesioni 10x10.

boolean[boolean[ ][][ ][][ ] bb = new boolean[8][10][5]; ] bb = new boolean[8][10][5];

crea un array bb con dimensioni 8x10x5. crea un array bb con dimensioni 8x10x5. Non e' obbligatorio specificare tutte le dimensioni di un Non e' obbligatorio specificare tutte le dimensioni di un array con una singola istruzione new. E' obbligatorio array con una singola istruzione new. E' obbligatorio specificare solo la prima dimensione, mentre le altre specificare solo la prima dimensione, mentre le altre possono essere lasciate indefinite e specificate piu' possono essere lasciate indefinite e specificate piu' tardi.tardi.

Page 21: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 21

boolean[boolean[ ][][ ] c; ] c;

c = new boolean[5][c = new boolean[5][ ]; ];

crea un array bidimensionale, lasciando indefinita la crea un array bidimensionale, lasciando indefinita la seconda dimensione. seconda dimensione. Ovviamente gli elementi di questo array sono null Ovviamente gli elementi di questo array sono null finche' non definiamo anche la seconda dimensione, finche' non definiamo anche la seconda dimensione, con: con:

c[0] = new boolean[10]; c[0] = new boolean[10]; c[1] = new boolean[10]; c[1] = new boolean[10]; c[2] = new boolean[10]; c[2] = new boolean[10]; c[3] = new boolean[10]; c[3] = new boolean[10]; c[4] = new boolean[10];c[4] = new boolean[10];

Page 22: Fisica computazionale I - 21 OPERATORI. Fisica computazionale I - 22 OGGETTI Gli oggetti sono strutture di dati che possono essere create, attraverso.

Fisica computazionale I - 2 22

Uno dei vantaggi di questa proprieta' e' la possibilita' di creare Uno dei vantaggi di questa proprieta' e' la possibilita' di creare arrays non rettangolari: arrays non rettangolari:

boolean[boolean[ ][][ ] c; ] c; c = new boolean[5][c = new boolean[5][ ]; ]; c[0] = new boolean[100];c[0] = new boolean[100];

c[1] = new boolean[5]; c[1] = new boolean[5]; c[2] = new boolean[10]; c[2] = new boolean[10]; c[3] = new boolean[10]; c[3] = new boolean[10]; c[4] = new boolean[10]; c[4] = new boolean[10];

Ora l'array c ha una seconda dimensione non omogenea. Ora l'array c ha una seconda dimensione non omogenea. Potremo, ad esempio, creare un array triangolare con il Potremo, ad esempio, creare un array triangolare con il seguente codice: seguente codice:

int[int[ ][][ ] triangolo = new int[5][] triangolo = new int[5][ ]; ]; for(int i=0; i < triangolo.length; i++)for(int i=0; i < triangolo.length; i++)

{ { triangolo[triangolo[ i i ] = new int[i+1];] = new int[i+1];

} }