Array: introduzione

Un array è un gruppo di variabili dello stesso tipo. Per esempio, un array di interi è un gruppo di variabili, tutte di tipo intero. Il vantaggio dell'array è che basta una sola dichiarazione, ed è facile realizzare dei cicli che effettuano le stesse operazioni su tutte le variabili di un vettore. Si consideri per esempio la situazione in cui si hanno 100 valori interi, e a un certo punto è necessario incrementare ognuno di essi di 1 e stamparli. Senza usare i vettori, sarebbe necessario un codice complicato come quello del programma NoArray.java:
class NoArray {
  public static void main(String[] args) {
    int variabile1=41;
    int variabile2=74;
    int variabile3=7;
    ....

    variabile1=variabile1+1;
    System.out.println(variabile1);
    variabile2=variabile2+1;
    System.out.println(variabile2);
    variabile3=variabile3+1;
    ...
  }
}
Questo genere di operazioni si semplificano raggruppando tutte le variabili di un certo tipo in un unico vettore. La dichiarazione di un vettore che contiene 100 elementi di tipo intero è:
  int x[]=new int[100];
Si può pensare a questa operazione come equivalente a dichiarare le seguenti variabili, tutte di tipo intero: x[0], x[1], x[2],...., x[99]. Si noti che il primo elemento è 0, mentre l'ultimo è 99. Questo può creare confusione, dal momento che nella dichiarazione appare il numero 100.

Il punto fondamentale è che queste variabili x[0],... si possono usare come variabili normali, ma in più è possibile anche fare riferimenti per esempio a x[i] dove i è un'altra variabile. Per esempio, la sequenza di istruzioni

i=10;
System.out.println(x[i]);
stampa il contenuto della variabile x[10]. In generale, la notazione x[espressione] è la componente del vettore determinata dalla valutazione della espressione. Se per esempio i=10 allora x[i+4] è esattamente lo stesso di x[14]. Questo rende i vettori molto comodi quando ci sono operazioni che vanno ripetute su un insieme di variabili. Per esempio, l'incremento e stampa dei cento valori si può fare definendo e assegnando valori a un vettore di interi x, e poi effettuando un ciclo:
  int i;

  for(i=0; i<=99; i=i+1) {
    x[i]=x[i]+1;
    System.out.println(x[i]);
  }
La assegnazione agli elementi di un vettore si può semplificare. Invece di fare x[0]=41; x[1]=74; ..., si possono dare tutti i valori nella fase di dichiarazione. Il programma completo ConArray.java è il seguente.
class ConArray {
  public static void main(String[] args) {
    int x[]={41, 74, 7, 40, 73, 6, 39, 72, 5, 38, 71, 4, 37, 70, 3, 36, 69, 2, 35, 68, 1, 34, 67, 0, 33, 66, 99, 32, 65, 98, 31, 64, 97, 30, 63, 96, 29, 62, 95, 28, 61, 94, 27, 60, 93, 26, 59, 92, 25, 58, 91, 24, 57, 90, 23, 56, 89, 22, 55, 88, 21, 54, 87, 20, 53, 86, 19, 52, 85, 18, 51, 84, 17, 50, 83, 16, 49, 82, 15, 48, 81, 14, 47, 80, 13, 46, 79, 12, 45, 78, 11, 44, 77, 10, 43, 76, 9, 42, 75, 8, 41 };
    int i;

    for(i=0; i<=99; i=i+1) {
      x[i]=x[i]+1;
      System.out.println(x[i]);
    }
  }
}

Dimensione di un vettore

Concludiamo la sezione con il metodo che permette di valutare la lunghezza di un vettore. Nel caso in cui il vettore venga dichiarato con una istruzione del tipo int x[]=new int[100], questo vettore contiene esattamente 100 elementi (da 0 a 99) ossia il numero di elementi è dato dal numero fra parentesi quadre. Nel caso in cui la dichiarazione contiene già la inizializzazione, ossia del tipo int x[]={12, 24, ...}, il numero di elementi che compongono un vettore è dato dal numero di elementi fra parentesi graffe. Esiste un modo per determinare la lunghezza di un vettore senza contare gli elementi nella dichiarazione: se x è un vettore, allora x.length è la sua lunghezza. Quindi, una istruzione del tipo System.out.println(x.length) stampa il numero di elementi del vettore x.

Indici di un vettore

Come si è già specificato, gli elementi di un vettore x sono x[0], ecc, fino a un certo x[c], in cui c dipende dalla dichiarazione del vettore. Cosa succede se si prova a usare x[d] in cui d>c? Durante la esecuzione del programma si genera un errore. Lo stesso succede usando un d negativo. In generale, se un vettore ha elementi x[0],...,x[c], ogni tentativo di usare elementi x[d] in cui d non è compreso fra 0 e c genera un errore.

Per concludere, va notato come l'indice di un vettore (quello che sta fra parentesi quadre) può essere una espressione qualsiasi purchè dia un risultato di tipo intero, oltre che compreso fra 0 e il massimo elemento del vettore. Esemi di riferimenti che non funzionano sono:

  1. x[10.5] (perchè 10.5 è un numero reale)
  2. x[i] (dove i è una variabile reale)