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.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Puntatori Linguaggio C.
Argomenti della lezione
UNITÀ A2 JAVA: LE BASI DEL LINGUAGGIO Approfondimenti.
Array multidimensionali
Universita di Camerino
Array di array Capitolo 20 febbraio 2004 Array di array.
Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Un nuovo tipo di dati Gli array.
Fondamenti di Informatica
Algoritmi in C++ (1) da completare
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Allocazione dinamica della memoria
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Argomenti della lezione
Approfondimento delle classi
JavaScript: Array JavaScript: Array.
Le funzioni.
Java base III: Array e Stringhe
AN FI Array Array in Java. AN FI Array Dichiarazione di array in Java [ ]; //oppure u [] ; int a[]; int[] a; u La dimensione non è specificata.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 6 (Deitel) I vettori Sommario Introduzione Vettori Dichiarazione di vettori 6.4.
ARRAY MULTIDIMENDIONALI
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Programmazione di Calcolatori
Programmazione concorrente
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
GLI ARRAY MONODIMENSIONALI. Utilizzando le nostre attuali conoscenze, proviamo a risolvere il seguente problema: Calcolare la media dei voti conseguiti.
Programmazione ad oggetti
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Public class SimpleHash { //DICHIARAZIONE DELLE VARIABILI DI ISTANZA //tabella hash private int[] table; //dimensione della tabella (meglio se numero primo)
Il linguaggio C Puntatori e dintorni.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Fondamenti di informatica T-A Esercitazione 5 : Stringhe ed array AA 2012/2013 Tutor : Domenico Di Carlo.
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
11/11/01Classe String 1 La classe String Come usare le stringhe.
13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione.
6/11/01Ordinamento 1 Un esempio di algoritmi: ordinamento.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
Stringhe in Java. Definire una stringa. Definire una stringa in Java Il modo più semplice e diretto per creare un oggetto di tipo String è assegnare alla.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

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.

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.

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 a

30/10/01 Array4 a[6] 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

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

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

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(); }

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.} } Elemento 0: 86 Elemento 1: 83 Elemento 2: 12 Elemento 3: 82 Elemento 4: Elemento 5: 1 Elemento 6: 88 Elemento 7: 48 Elemento 8: 10 Elemento 9: 80 Esecuzioni diverse producono risultati diversi

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”

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.} } E:\ Java\source\Echo>java Echo uno due tre uno due tre E:\Java\source\Echo>

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.} }

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\>

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.} } E:\Java\source\Vettori\>java ProvaVettore uso: java ProvaVettore E:\Java\source\Vettori\>

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.

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.

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\>

30/10/01Array 17 Riferimenti e tipi primitivi

// 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); }

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; public String toString() { 10. return “voto = ” + voto; 11. } }

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 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)

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 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. } } voto = 25 new crea lo spazio di memoria necessario per memorizzare i dati legati a Studente a e li inizializza a 0

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; 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. } } voto = 25

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 { static Studente a, b; 4. static int v1, v2; 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. } } v1 = 3 v2 = 4 voto = 30

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

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.

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.

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]

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.

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/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.