Array
Raffaella Brighi, a.a. 2005/06
Corso di Algoritmi e programmazione. A.A. 2005-06
CdL Operatore Informatico Giuridico.
Gli array
„
„
„
„
Gli array sono utilizzati per raggruppare e organizzare i dati.
Un array è una lista di valori ognuno dei quali viene memorizzato in
una posizione ben precisa della struttura: il numero corrispondente
alla posizione si chiama indice.
Un array è caratterizzato da:
‰
nome
‰
dimensione (numero di elementi)
‰
tipo
Per accedere a un valore dell’array si utilizza il suo nome seguito
dall’indice racchiuso tra parentesi quadre. L’indice è sempre un
numero intero e parte da ZERO.
‰
‰
„
altezza[8] si riferisce al nono valore della lista (= al valore che ha
indice 8) cioè a 79
altezza [0] si riferisce al primo valore della lista (= al valore che
ha indice 0) cioè a 55
l’indice può essere rappresentato da un espressione
‰
altezza[n] l’elemento con indice n della lista
‰
altezza[(int) Math.random()*11]
altezza
0
1
2
3
4
5
6
7
8
9
10
55
61
70
74
62
69
66
73
79
62
10
1
„
Gli elementi dell’array, identificati attraverso
l’indice, sono usati come normali variabili:
cioè possono essere assegnati o utilizzati
all’interno di espressioni.
altezza[2]=72
somma= altezza[1] + altezza[2] + altezza[3]
System.out.println (“il valore è ” + altezza [1])
„
„
Un array contiene valori dello stesso tipo: si può creare
un array che contenga interi o che contenga stringhe ma
non un array che contiene sia stringhe sia interi
Un array è un oggetto: deve essere dichiarato e creato.
Al momento del new viene istanziato lo spazio di
memoria.
Dichiarazione di un array
int [] altezza;
altezza = new int [11];
oppure
„
„
„
int[] altezza = new int [11]
int indica che l’array altezza contiene interi
11 è la dimensione dell’array (l’array contiene 11 elementi da 0 a
10)
il simbolo [] è l’operatore indice.
‰
‰
„
„
ha la precedenza su qualsiasi altra operazione.
esegue il controllo dei limiti: se l’indice dell’elemento richiesto è
superiore alla lunghezza dell’array restituisce un errore es altezza[20].
la costante lenght dell’oggetto array riporta il numero di elementi
dell’array es. altezza.lenght vale 11
gli elementi di un array vengono generalemente manipolati dentro a
cicli for
2
Liste di inizializzazione
„
„
„
un array può essere istanziato anche
attraverso una lista di inizializzazione che
elenca i valori iniziali di ogni elemento
dell’array
int[] primes ={2, 3, 5, 7, 11, 13, 17, 19}
dichiara e crea un array con 8 elementi
Esercizi
„
„
„
Definire un array di 15 elementi e inizializzarlo con
valori uguali al valore dell’indice moltiplicato per 10.
impostare a 1000 il sesto elemento dell’array e
stampare i risultati.
Scrivere una classe per la gestione di un elenco di
10 numeri interi. Il costruttore della classe legge da
tastiera i 10 numeri. La classe fornisce i seguenti
servizi: (1) stampa gli elementi dell’elenco
dall’ultimo al primo e (2) stampare il valore del
numero più grande della lista.
Scrivere un programma che letta una parola
dall’input la stampi al contrario. Si utilizzi un array.
3
Array come parametri
„
„
Attenzione: gli array possono essere passati
come parametri ma essendo oggetti viene
passato un riferimento all’oggetto.
I cambiamenti che il metodo fa sugli elementi
dell’array sono dunque permanenti.
Array di oggetti
„
„
„
Array di stringhe
String[] parole = new String[25]
L’istruzione precedente dichiara e istanzia un array che si
chiama parole e contiene 25 elementi ognuno dei quali è
un riferimento ad un oggetto di tipo di String. Quindi
ogni elemento deve a sua volta essere creato
separatamente.
parole[1]= new String (“ciao”);
Gli array possono contenere riferimenti ad oggetti di
qualsiasi tipo, anche relativi a classi create da noi (es.
Coin)
4
Esercizio
„
Creare un classe che presa in input una
frase:
‰
‰
‰
stampi le parole di cui è composta la frase in
ordine inverso
stampi la la parola più corta
stampi la parola più lunga
Ordinamento
„
„
„
E’ il processo che riorganizza una lista di
elementi secondo un ordine ben definito. Es.
ordine alfabetico, ordine
crescente/decrescente.
Sono stati studiati e analizzati numerosi
algoritmi di ordinamento.
Ordinamento per selezione: si basa sullo
scambio degli elementi dell’array
5
Ordinamento per selezione
Scandisci a destra partendo da 3.
1 è più piccolo.
Scambia 1 e 3.
3
9
6
1
2
Scandisci a destra partendo da 9.
2 è più piccolo.
Scambia 9 e 2.
1
9
6
3
2
Scandisci a destra partendo da 6.
3 è più piccolo.
Scambia 6 e 3.
1
2
6
3
9
Scandisci a destra partendo da 6.
6 è più piccolo.
Scambia 6 e 6.
1
2
3
6
9
1
2
3
6
9
Implementazione dell’algoritmo
„
L’algoritmo si realizza con due cicli for annidati:
‰
‰
„
„
il ciclo più esterno controlla la posizione dell’array in cui
sarà memorizzato il successivo valore (0, 1, 2, 3, …, )
il ciclo più interno cerca il min a partire dalla posizione
successiva alla posizione individuata dal primo ciclo fino alla
fine dell’array
Scambio dei due valori: per scambiare il
contenuto di due variabili occorre sempre una
variabile di appoggio temporanea. L’algoritmo si
chiama SWAP.
es. sia A=5 e B=3 si vogliono scambiare i due valori:
‰
‰
‰
TEMP=B
B=A
A=B
6
Implementazione dell’algoritmo
public void selectionSort (int[] numeri)
{
int min, temp;
for (int index=0, index< numeri.lenght -1; index++)
{
min=index;
for (int scan=index+1; scan < numeri.lenght; scan++)
{
if ( numeri[scan] < numeri[min]) then
min=scan;
}
// swap
temp=numeri[min];
numeri[min]=numeri[index];
numeri[index]=temp;
}
}
Esercizio
„
Scrivere una classe che, lette dall’input un
elenco di parole, offra i seguenti servizi :
‰
‰
stampa delle parole in ordine inverso
stampa delle parole che compongono la frase in
ordine alfabetico
7
La classe Vector (java.util)
„
„
„
Offre servizi simili all’array, perché permette di
memorizzare una lista di valori e di accedervi tramite
un indice.
Può cambiare dinamicamente la sua dimensione e
gli elementi possono essere inseriti e rimossi:
quando si aggiungono elementi in posizione k
l’indice degli altri elementi slitta di conseguenza e
quando viene cancellato un elemento del vettore la
lista degli elementi collassa in modo da non lasciare
buchi.
Non sono obbligati a contenere oggetti dello stesso
tipo: ogni elemento è un riferimento ad un oggetto
di tipo Object.
Vector() costruttore – crea un vettore inizialmente vuoto
void addElement (Object obj)
void insertElementAt (Object obj, int index)
void setElement (Object obj, int index)
Object removeElement (Object obj)
void removeElement (int index)
void clear ()
boolean contains (Object obj)
int indexOf (Object obj)
Object ElementAt (int index)
boolean isEmpty ()
int size ()
8
Esercizio
„
„
„
„
„
„
Creare la lista di calciatori di una squadra di calcio:
Buffon, Panucci, Cannavaro, Nesta, Zambrotta,
Camoranesi, Gattuso, Totti, Pirlo, Gilardino, Toni.
Sostituire Gilardino con Del Piero.
Stampare il numero della posizione di Cannavaro.
Eliminare Totti.
Togliere Panucci ed inserire Vieri in posizione 9.
Stampare la nuova composizione della squadra ad
ogni cambiamento
import java.util.*;
public class GestSquadra {
public GestSquadra() {
}
public static void main(String[] args) {
// TODO code application logic here
Vector squadra =new Vector();
squadra.addElement("Buffon");
squadra.addElement("Panucci");
squadra.addElement("Cannavaro");
squadra.addElement("Nesta");
squadra.addElement("Zambrotta");
squadra.addElement("Camoranesi");
squadra.addElement("Gattuso");
squadra.addElement("Totti");
squadra.addElement("Pirlo");
squadra.addElement("Gilardino");
squadra.addElement("Toni");
System.out.println (squadra);
int index;
index=squadra.indexOf("Gilardino");
squadra.setElementAt("Del Piero",
index);
System.out.println (squadra);
squadra.removeElement("Totti");
System.out.println (squadra);
squadra.removeElement("Panucci");
squadra.insertElementAt("Vieri", 9);
System.out.println (squadra);
}
}
9