Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7 variabili di tipo double può essere dichiarato un array ed inizializzato in questo modo: double[] temperatura = {22.2,25.1,24.2,23.0,22.4,21.1,20.0}; Ciò equivale a dichiarare 7 variabili di tipo reale temperatura[0], temperatura[1], temperatura[2], temperatura[3], temperatura[4], temperatura[5], temperatura[6].
Terminologia di un array Nome Indice Valore di una variabile indicizzata o elemento temperatura[n + 2] = 32; Indice: deve essere un letterale intero oppure un’espressione che ritorna un int Variabile indicizzata o elemento L’indice permette di ‘cacolare’ il nome di ognuna di queste variabili ATTENZIONE! Il primo indice di un array è 0.
Nome di un array e locazioni di memoria L’identificatore temperatura è detto nome dell’array. Questo nome identifica una locazione di memoria contenente l’indirizzo della locazione di memoria che contiene il primo valore contenuto nell’array. Esempio: int numero = 6; int[] numeroArrray = {6}; . numero numeroArray numeroArray[0] 6 6
Inizializzazione di un array Se si vuole creare un array di un certo tipo con un numero di elemento definito ma senza dover elencare i valori, si può usare la parola chiave new seguita dal nome del tipo base e dal numero degli elementi racchiusi tra parentesi quadre. Ad esempio per creare un array di 100 numeri reali possiamo scrivere: double[] voto = new double[100]; La differenza fra l’elenco e questo tipo di scrittura è che in quest’ultimo modo gli elementi dell’array non sono inizializzati e devono quindi essere assegnati con istruzioni successive (in realtà sono inizializzati con il valore nullo)
Lunghezza di un array Il numero degli elementi contenuti un un array è detto lunghezza o dimensione dell’array. La lunghezza di un array definisce il numero massimo di elementi che l’array può contenere. E’ possibile conoscere la lunghezza di un array utilizzando il nome dell’array seguito da un punto e dalla parola length temperatura.length restituirà il valore 7 Provando a cambiare la lunghezza di un array si genera un errore di compilazione: temperatura.length = 10; Cannot assign a value to a final variable length
Dominio di indicizzazione Indicizzazione di array usa numerazione a partire da 0 primo elemento: indice 0 secondo elemento: indice 1 n-esimo elemento: indice n-1 ultimo elemento: indice length-1 Esempio: int[] scores = {97, 86, 92, 71};
Indicizzazione fuori dominio Ogni indice dell’array temperatura deve avere un valore compreso tra 0 e 6 (length-1). Se si accede alla variabile indicizzata temperatura[n + 2] allora n + 2 deve avere uno dei seguenti valori: 0, 1, 2, 3, 4, 5, 6. In caso contrario si dice che l’indice è fuori dominio ed in fase di esecuzione l’interprete Java avvertirà del problema con un messaggio di errore. Da osservare che in questo caso Java si differenzia da C e C++ i quali non avvertono dell’errore di indice fuori dominio in fase di esecuzione.
Array bidimensionali: matrici int[][] miaMatrice = {{1,2,3},{4,5,6}}; In questo modo ho dichiarato ed inizializzato la matrice 2x3: Oppure: int[][] miaMatrice = new int[2][3]; Con questa dichiarazione la matrice va successivamente inizializzata con i valori desiderati. NB: miaMatrice.length fornisce il numero delle righe miaMatrice[0].length fornisce il numero delle colonne miaMatrice[1][2] ha come valore indicizzato 6 !!!! 1 2 3 4 5 6
Metodi ed array Una variabile di tipo array può essere utilizzata come parametro formale di un metodo oppure come tipo di ritorno. Es: Scrivere un metodo per inizializzare i valori di un array; Scrivere un metodo per sommare gli elementi di un array; Scrivere un metodo per stampare i valori di un array;
Es1:
Es2: Il metodo raddoppiaArray modifica l’array ricevuta in input. Come posso scrivere un metodo che non modifichi l’array di input?
Uguaglianza di array Per vedere se due array sono uguali si deve controllare: Che abbiano la stessa lunghezza; Che contengano gli stessi valori nelle posizioni corrispondenti.
Uguaglianza di array (II) Se non hanno la stessa lunghezza ritorno subito false (ed esco dal metodo). Controllo i valori dei due arrays per ogni posizione. Non appena ne trovo due diversi ritorno false (ed esco dal metodo). Se non sono entrato in alcuno dei casi precedenti ritorno true.
Ordinamento di array Ordinare un elenco di elementi è un compito molto frequente ordinare numeri in modo crescente ordinare numeri in modo decrescente ordinare stringhe in modo alfabetico Vi sono molti modi per ordinare un elenco Selection sort uno dei più facili non il più efficiente, ma facile da capire e da programmare
Algoritmo Selection Sort Per ordinare un array di interi in modo crescente: cerca nell'array il numero più piccolo e scambialo con il primo elemento dell'array la parte ordinata dell'array è ora il primo elemento, mentre quella non ancora ordinata sono i rimanenti elementi cerca nella parte non ordinata il numero più piccolo e scambialo con il secondo elemento dell'array ripeti la ricerca e lo scambio fino a quando tutti gli elementi sono al posto giusto ogni iterazione aumenta di 1 la lunghezza della parte ordinata e diminuisce di 1 quella della parte non ordinata
Esempio
Selection Sort: codice Metodo Invocazione Output