Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoFabio Repetto Modificato 9 anni fa
1
30/10/01Array 1 Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo. La lunghezza di un array e’ stabilita quando l’array viene creato. Dopo la sua creazione, un array ha una lunghezza fissa.
2
30/10/01 Array2 Un elemento di un array e’ uno dei valori contenuti nell’array e ad esso si accede attraverso un indice che individua la sua posizione all’interno dell’array.
3
30/10/01 Array3 In Java gli array sono oggetti I componenti di un array: sono tutti dello stesso tipo possono essere di tipo primitivo o riferimenti (reference) (altri oggetti, inclusi array) sono indicizzati tramite valori di tipo int (indice primo elemento: 0), con controllo di validità degli indici a run-time Esempio: int[ ] a; /* dichiarazione */ /* anche int a[ ]; */ a = new int[3]; /* creazione */ a[0] = 1; /* uso */ null a a 0 0 0 0 0 0 a 1 1 0 0 0 0
4
30/10/01 Array4 a[6] -45 6 0 72 1543 -89 0 62 -3 1 6453 78 Nome del vettore a[0] a[1] a[2] a[3] a[11] a[10] a[9] a[8] a[7] a[5] a[4] Indice dell’elemento nel vettore
5
30/10/01 Array5 Ogni vettore conosce la propria lunghezza a.length Gli array sono definiti in due modi diversi: int[ ] a, b; // ho definito due vettori di interi int a[ ], b; // a è un vettore di interi, b è un intero Gli array sono inizializzati in due modi diversi: Con l’operatore new : int[] a = new int[5]; // ho creato un vettore di 5 elementi inizializzati a 0 In modo esplicito: int[] a = { 1, 2, 4, 8, 16}; // inizializzo esplicitamente tutti i valori
6
30/10/01 Array6 Vettori La lunghezza di un array è fissata al momento della sua creazione, e non può essere cambiata… int[ ] a = new int[3]... ma si può assegnare un nuovo array di diversa lunghezza all’array reference: a = new int[5]; a heap a
7
30/10/01 Array7 Esempio di gestione di un array public class ArrayDemo { public static void main(String[] args) { int[] anArray; // dichiaro array di interi anArray = new int[10]; // creo array di 10 interi // assegno un valore ad ogni elemento dell’array e lo stampo for (int i = 0; i < anArray.length; i++) { anArray[i] = i; System.out.print(anArray[i] + " "); } System.out.println(); }
8
30/10/01 Array8 Esempio vettore 1./* 2. * programma che riempie un vettore con interi 3. * positivi di due cifre scelti a caso 4. */ 5. 6.public class ProvaVettore { 7. 8.public static void main(String[] args) { 9. final int DIM = 10; 10. int[] vet = new int[DIM]; 11. for(int i=0; i<vet.length; i++) 12. vet[i] = (int) (Math.random()*100); 13. for(int i=0; i<vet.length; i++) 14.System.out.println("Elemento "+i+": "+vet[i]); 15.} 16. 17.} Elemento 0: 86 Elemento 1: 83 Elemento 2: 12 Elemento 3: 82 Elemento 4: 53... Elemento 5: 1 Elemento 6: 88 Elemento 7: 48 Elemento 8: 10 Elemento 9: 80 Esecuzioni diverse producono risultati diversi
9
30/10/01 Array9 Argomenti del programma Il metodo main ha un parametro che convenzionalmente si chiama args definito come String[ ] (vettore di stringhe) static public void main(String[] args) {... } La variabile memorizza un vettore di stringhe corrispondenti ai parametri scritti sulla riga di comando. Supponiamo di avere la classe Echo e di richiamarla con la riga di comando: % java Echo Tizio, Caio In questo caso args memorizza 2 parole: ad args[0] è associato “Tizio,” ad args[1] è associato “Caio”
10
30/10/01 Array10 Programma echo 1./* 2. * programma che stampa tutti i parametri 3. * 4. * comando echo 5. */ 6.public class Echo { 7. 8.public static void main(String[] args) { 9. for(int i=0; i<args.length; i++) 10. System.out.print(args[i]+' '); 11. System.out.print('\n'); 12.} 13. 14.} E:\ Java\source\Echo>java Echo uno due tre uno due tre E:\Java\source\Echo>
11
30/10/01 Array11 Esempio vettore 1./* 2. * programma che riempie un vettore con interi 3. * positivi di due cifre scelti a caso 4. * la dimensione del vettore viene data come parametro 5. */ 6. 7.public class ProvaVettore { 8. 9.public static void main(String[] args) { 10. int dim = Integer.parseInt(args[0]); 11. int[] vet = new int[dim]; 12. for(int i=0; i<vet.length; i++) 13. vet[i] = (int) (Math.random()*100); 14. for(int i=0; i<vet.length; i++) 15.System.out.println("Elemento "+i+": "+vet[i]); 16.} 17. 18.}
12
30/10/01 Array12 Esempio vettore E:\ Java\source\Vettori>java ProvaVettore 3 Elemento 0: 83 Elemento 1: 53 Elemento 2: 18 E:\Java\source\Vettori> E:\Java\source\Vettori\>java ProvaVettore Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at ProvaVettore.main(ProvaVettore.java:4) E:\Java\source\Vettori\>
13
30/10/01 Array13 Esempio vettore 1.public class ProvaVettore { 2. 3.public static void main(String[] args) { 4. if(args.length==0) { 5. System.err.println( 6. “uso: java ProvaVettore ”); 7. System.exit(1); 8. } 9. int dim = Integer.parseInt(args[0]); 10. int[] vet = new int[dim]; 11. for(int i=0; i<vet.length; i++) 12. vet[i] = (int) (Math.random()*100); 13. for(int i=0; i<args.length; i++) 14.System.out.println("Elemento "+i+": "+vet[i]); 15.} 16. 17.} E:\Java\source\Vettori\>java ProvaVettore uso: java ProvaVettore E:\Java\source\Vettori\>
14
30/10/01 Array14 Esempio vettore 1.public class ProvaVettore { 2. 3.public int[] v; 4. 5./** 6. metodo costruttore crea il vettore 7. e lo riempie 8. ha bisogno come parametro della dimensione 9. */ 10.public ProvaVettore(int dim) { 11. v = new int[dim]; 12. for(int i=0; i<dim; i++) 13. v[i] = (int) (Math.random()*100); 14.} 15.
15
30/10/01 Array15 Esempio vettore 16./** 17. il metodo trova la posizione del 18. valore massimo nel vettore 19. */ 20.public int massimo() { 21.int ind=0; 22.for(int i=1; i<v.length; i++) 23.if(v[i]>v[ind]) ind = i; 24.return ind; 25.} 26.
16
30/10/01 Array16 Esempio vettore 27.public static void main(String[] args) { 28. if(args.length==0) { 29. System.err.println( 30. "uso: java ProvaVettore "); 31. System.exit(1); 32. } 33. int dim = Integer.parseInt(args[0]); 34. ProvaVettore vet = new ProvaVettore(dim); 35. int max = vet.massimo(); 36. System.out.println( 37. "il massimo e' l'elemento "+max+ 38. " di valore "+vet.v[max]); 39.} 40.} E:\Java\source\Vettori\>java ProvaVettore 6 il massimo e' l'elemento 5 di valore 82 E:\Java\source\Vettori\>
17
30/10/01Array 17 Riferimenti e tipi primitivi
18
// classe di test della classe Punto2D public class testRiferimenti{ public static void main(String[] args) { Punto2D p1 = new Punto2D(3, 2); Punto2D p2 = p1; System.out.println(" p1 = " + p1); System.out.println(" p2 = " + p2); p1.sposta(2, 2); System.out.println("Sposto p1 di 2, 2"); System.out.println(" p1 = " + p1); System.out.println(" p2 = " + p2); p2.sposta(-2, -2); System.out.println("Sposto p2 di -2, -2"); System.out.println(" p1 = " + p1); System.out.println(" p2 = " + p2); int a1 = 2; int a2 = a1; System.out.println(" a1 = " + a1); System.out.println(" a2 = " + a2); a1 += 2; System.out.println("Incremento a1 di 2"); System.out.println(" a1 = " + a1); System.out.println(" a2 = " + a2); a2 -= 2; System.out.println("Decremento a2 di 2"); System.out.println(" a1 = " + a1); System.out.println(" a2 = " + a2); }
19
30/10/01 Array19 Riferimenti e tipi primitivi L’operatore new restituisce un riferimento ad un oggetto, non l’oggetto stesso (in termini tradizionali un indirizzo di memoria) Le variabili quindi memorizzano riferimenti, per utilizzare i singoli si utilizza l’operatore “.” (ma il discorso vale anche per I metodi) 1./** 2. * la classe Studente mi permette di 3. * memorizzare un intero che rappresenta il voto 4. */ 5.public class Studente { 6. 7.public int voto; 8. 9. public String toString() { 10. return “voto = ” + voto; 11. } 12. 13.}
20
30/10/01 Array20 Riferimenti e tipi primitivi L’operatore new restituisce un riferimento ad un oggetto, non l’oggetto stesso (in termini tradizionali un indirizzo di memoria) Le variabili quindi memorizzano riferimenti, per utilizzare i singoli si utilizza l’operatore “.” (ma il discorso vale anche per I metodi) 1.public class testStudente { 2. 3.static Studente a; // viene inizializzato a null 4. 5. public static void main(String[] args) { 6. System.out.println(a.toString()); 7. } 8. 9.} Exception in thread "main" java.lang.NullPointerException at testStudente.main(testStudente.java:6)
21
30/10/01 Array21 Riferimenti e tipi primitivi L’operatore new restituisce un riferimento ad un oggetto, non l’oggetto stesso (in termini tradizionali un indirizzo di memoria) Le variabili quindi memorizzano riferimenti, per utilizzare i singoli si utilizza l’operatore “.” (ma il discorso vale anche per I metodi) 1.public class testStudente { 2. 3.static Studente a; // viene inizializzato a null 4. 5. public static void main(String[] args) { 6. a = new Studente(); // val è inizializzato a 0 7. a.voto = 25; 8. // applico il metodo toString all’oggetto a 9. System.out.println(a.toString()); 10. } 11. 12.} voto = 25 new crea lo spazio di memoria necessario per memorizzare i dati legati a Studente a e li inizializza a 0
22
30/10/01 Array22 Riferimenti e tipi primitivi L’operatore new restituisce un riferimento ad un oggetto, non l’oggetto stesso (in termini tradizionali un indirizzo di memoria) Le variabili quindi memorizzano riferimenti, per utilizzare i singoli si utilizza l’operatore “.” (ma il discorso vale anche per I metodi) 1.public class testStudente { 2. 3.static Studente a, b; 4. 5. public static void main(String[] args) { 6. a = new Studente (); 7. a.voto = 25; 8. b = a; 9. System.out.println(a.toString()); 10. System.out.println(b.toString()); 11. } 12. 13.} voto = 25
23
30/10/01 Array23 Riferimenti e tipi primitivi L’operatore new restituisce un riferimento ad un oggetto, non l’oggetto stesso (in termini tradizionali un indirizzo di memoria) Le variabili quindi memorizzano riferimenti, per utilizzare i singoli si utilizza l’operatore “.” (ma il discorso vale anche per I metodi) 1.public class testStudente { 2. 3. static Studente a, b; 4. static int v1, v2; 5. 6. public static void main(String[] args) { 7. a = new Studente (); 8. a.voto = 25; 9. b = a; 10. v1 = 4; 11. v2 = v1; 12. v1 = 3; 13. a.voto = 30; 14. System.out.println(“v1 = ”+v1+“ v2 = ”+v2); 15. System.out.println(a.toString()); 16. System.out.println(b.toString()); 17. } 18. 19.} v1 = 3 v2 = 4 voto = 30
24
30/10/01 Array24 Array di oggetti class Automobile { public int targa; public int velocità; …. } …. Automobile[ ] a=new Automobile[3]; a heap a[2].targa
25
30/10/01 Array25 Array di oggetti Gli elementi di un array possono essere riferimenti a oggetti. La seguente dichiarazione riserva spazio per memorizzare 25 riferimenti a oggetti di tipo String : String[] words = new String[25]; Esso non crea gli oggetti String stessi Ogni oggetto memorizzato in un array deve essere istanziato separatamente.
26
30/10/01 Array26 Array di oggetti Gli oggetti possono avere degli array come variabili di istanza. Quindi, e’ possibile creare strutture dati abbastanza complesse in modo semplice usando array e oggetti. Il progettista del software deve attentamente determinare una organizzazione dei dati e degli oggetti che risulta piu’ adatta al tipo di problema e alla situazione.
27
30/10/01 Array27 Array di array short [ ][ ] a;/* array di array di short */ short a[ ][ ];/* equivalente */ a = new short[3][2]; a = new short[3][ ]; a heap null a heap a[2][0]
28
30/10/01 Array28 Array bidimensionali Un array monodimensionale memorizza una semplice lista di valori. Un array bidimensionale puo’ essere pensato come una tabella di valori, disposti in righe e colonne. L’elemento di un array bidimensionale viene individuato da due indici. Piu’ precisamente, un array bidimensionale in Java e’ un array i cui elementi sono a loro volta degli array.
29
30/10/01 Array29 Array multidimensionali Un array puo’ avere un numero qualsivoglia di dimensioni, in questo caso si parla di array multidimensionale. Ogni dimensione e’ a sua volta un array caratterizzato da una propria lunghezza costante ( length). Poiche’ ogni dimensione e’ un array di riferimenti ad array, gli array di una dimensione possono essere di differenti lunghezze.
30
30/10/01 Array30 Array come parametri Un intero array puo’ essere passato come parametro ad un metodo. Come per ogni altro oggetto, viene passato al metodo il riferimento all’array il cui valore viene copiato nel parametro formale del metodo. Cambiando un elemento di un array nel metodo, viene alterato il valore originale. Il singolo elemento di un array puo’ essere passato ad un metodo e seguira’ le regole di passaggio dei parametri di un elemento di quel tipo.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.