Corso di Java

Lavorare con gli array - Parte I

 

Un array in Java può contenere tanto un tipo primitivo quanto un oggetto; la differenza sostanziale è che una volta creato un array di oggetti, ad es.:

Automobile[] autoClienti = new Automobile[1000];

occorre istanziare ognuno di questi oggetti.
Infatti, se subito dopo la dichiarazione di cui sopra inserissimo l’istruzione:

System.out.println(autoClienti[0].getMarcaModello());

otterremo in fase di esecuzione un errore di tipo “NullPointerException”, che si verifica quando si utilizza null laddove è richiesto un oggetto.
Ciò avviene perché la dichiarazione di un array crea, di fatto, un array pronto a contenere oggetti di un dato tipo, ma che ancora contiene solo oggetti null, ossia oggetti non validi.
Bisogna quindi riempire le posizioni dell’array che si vogliono utilizzare con degli oggetti, creati a loro volta con l’istruzione new oppure mediante un assegnamento di un oggetto di quel tipo creato precedentemente.
Nel caso dell’esempio, prima di utilizzare l’istruzione di stampa a video, occorre inserire un oggetto di tipo “Automobile” nella posizione 0 dell’array e ciò può essere fatto nel modo seguente:

autoClienti[0] = new Automobile("Alfa", "75", 55, 10, 9, 4, true, true);

oppure:

autoClienti[1] = new Automobile("Alfa", "75", 55, 10, 9, 4, true, true);
autoClienti[0] = autoClienti[1];

Se non si conosce la dimensione di un array, la si può ricavare semplicemente scrivendo:

nomeArray.length

Si noti che un errore che si commette comunemente è quello di far seguire alla parola length una coppia di parentesi tonde vuote: ciò non funziona, perché length non è un metodo, ma una proprietà offerta dalla piattaforma Java per tutti gli array.

Java permette di creare degli array multidimensionali (utili soprattutto quando si ha necessità di lavorare con le matrici) per mezzo di array di array.
Ad es. per creare una matrice 12 x 12 contenente stringhe, basta scrivere:

String[][] matrice = new String[12][12];

In questo modo viene creato un array i cui elementi sono array di stringhe.
Per semplicità consideriamo solamente array bidimensionali, ma quanto verrà detto vale per un numero qualsiasi di array annidati, anche se sono pochissimi i casi in cui si richiede un array avente più di tre dimensioni.

Non è necessario che tutti i sotto-array siano di uguali dimensioni; l’esempio seguente può aiutarci a comprendere meglio questo concetto:

public class ProvaMatrice {
       public static void main(String arg[]) {
String[] genitori = {"Mario", "Maria"};
             String[] figli = {"Piero", "PierPaolo", "PierPiero"};
             String[][] famiglia = {genitori, figli};
            
             System.out.println("Numero genitori : " + famiglia[0].length);    
             System.out.println("Numero figli    : " + famiglia[1].length);
             System.out.println("Nome padre : " + famiglia[0][0]);
             System.out.println("Nome madre : " + famiglia[0][1]);
             System.out.println("Nome primogenito   : " + famiglia[1][0]);
             System.out.println("Nome secondogenito : " + famiglia[1][1]);
             System.out.println("Nome terzogenito   : " + famiglia[1][2]);
       }
}

Per quanto detto finora le prime tre istruzioni dovrebbero essere piuttosto chiare: vengono creati due array di stringhe, rispettivamente di 2 e 3 elementi e poi un array che li contiene entrambi.
Le successive istruzioni mostrano a video le seguenti informazioni:

Numero genitori : 2
Numero figli    : 3
Nome padre : Mario
Nome madre : Maria
Nome primogenito   : Piero
Nome secondogenito : PierPaolo
Nome terzogenito   : PierPiero


Confrontando ciascuna riga del risultato con la corrispondente linea di codice che lo ha prodotto, vediamo che famiglia[0] ha una dimensione (pari a 2 perché non è altro che l’array genitori) diversa da famiglia[1] (che, essendo l’array figli, ha dimensione pari a 3).
Nella prossima lezione continueremo a discutere del modo in cui è possibile utilizzare gli array.

 

Torna all'indice Generale del corso di Corso di Java di Software Planet