L'informatico di Schrödinger

cat
16Nov/10Off

Java: array, stringhe e controllo del flusso

THIS IS JAVA!
Image by puerexmachina via Flickr

Nel post precedente abbiamo introdotto i costrutti di controllo del flusso, ci siamo soffermati brevemente su una prima regola - basilare - di scoping ed abbiamo ripreso il concetto di tipizzazione.

Adesso cercheremo di mettere insieme quanto visto sino ad ora in un esempio: fatto ciò introdurremo il concetto di array e le stringhe.

Nella prossima puntata proveremo a scrivere la nostra prima classe e introdurremo le basi della programmazione Object Oriented.

Nota: WP-Codebox da qualche problema al momento con l'escape di alcuni caratteri - dove leggete  &lt; è da intendere <. Vedrò di rimediare appena possibile.

Partiamo subito in quarta presentando un esempio riassuntivo: il codice si considera contenuto nel metodo main (già introdotto nella prima lezione).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int totale = 10;
 
// Esempio ciclo For con If interno
for (int i=0; i<totale; i++){
   if(i%2==0) System.out.println(i+" è un numero pari");
   else System.out.println(i+" è un numero dispari");
}
 
// Esempio equivalente ciclo while con switch
int count = 0;
while(count<totale){
  switch(count%2){
    case 0: System.out.println(count+" è un numero pari"); break;
    case 1: System.out.println(count+" è un numero dispari"); break;
    default: break;
  }
  count++;
}

Ometto l'esempio del do-while poiché facilmente deducibile.

Come si può notare la differenza principale tra i due modelli di ciclo sta sostanzialmente nella modalità di aggiornamento della variabile utilizzata nella Guardia (o condizione) che viene testata per valutare quando è possibile interrompere l'esecuzione del costrutto.

Introduciamo ora gli array. Un array (traducibile in italiano con il termine "vettore" anche se, per motivi che vedremo in seguito, per evitare fraintendimenti preferiremo usare il termine inglese) è una struttura dati primitiva che possiamo visualizzare, logicamente, come un contenitore dotato di un numero prefissato di celle contenenti ciascuna una variabile dello stesso tipo.
In questo caso al momento della dichiarazione di un array si definisce il tipo del suo contenuto.

Ciascuna cella dell'array è indirizzabile, accedibile, tramite un indice progressivo. Vediamo con un esempio banale come dichiarare un array di interi, come riempirlo con un ciclo for e come leggerne il contenuto con un ciclo while.

1
2
3
4
5
6
7
8
9
10
int[] numbers = new int[10];
for(int i=0; i<numbers.length; i++){
  numbers[i] = i*2;
}
 
int count = 0;
while(count<numbers.length){
  System.out.println("La cella "+count+" contiene il valore "+numbers[count]);
  count++;
}

Nell'esempio precedente ogni cella contiene come valore il doppio del suo indice.
Commenti per i punti che possono risultare poco chiari:

  • parola chiave new: questo token (riservato, ergo non utilizzabile come nome di variabile), è utilizzato per inizializzare gli "oggetti" in Java allocando lo spazio necessario nello Heap (ovviamente ritorneremo su questo punto al momento dell'introduzione della programmazione ad oggetti per rendere più chiaro come il linguaggio gestisce la memoria)
  • numbers.length: length è una "proprietà" definita per gli array e da informazioni relativamente alla loro capacità.

Ovviamente c'è da ricordarsi che il primo indice di un array è dato dalla posizione 0 e non dalla posizione 1.

Gli array fin qui descritti vanno sotto il nome di "array monodimensionali": tramite questa semplice struttura dati è infatti possibile descrivere anche rappresentazioni più complesse passando da una descrizione monodimensionale ad una multidimensionale. Riprendiamo l'esempio precedente e vediamo come può essere facilmente modificato per lavorare con una matrice.

1
2
3
4
5
6
int[][] numbers = new int[10][10];
for(int x=0; x<numbers.length; x++){
  for(int y=0;y<numbers[x].length; y++){
    numbers[x][y] = x*y;
  }
}

Ometto la fase di lettura poiché è analoga a quella di scrittura riportata.

Ovviamente possiamo non fermarci a array bi-dimensionali, è facile generalizzare ed estendere il concetto a qualsiasi dimensionalità.

Dopo aver introdotto questa prima "struttura dati" possiamo fare un ulteriore primo passo verso la programmazione ad oggetti introducendo - brevemente e non nella sua interezza - la classe String.

Più volte abbiamo utilizzato il metodo println per stampare a video i risultati dei nostri esempi: tale metodo prende in input (ciò che è contenuto dalle parentesi tonde) un oggetto di tipo String: tale è infatti la classe che viene utilizzata per definire le stringhe di testo e, tramite i suoi metodi, modificarle.

1
String testo = new String("Ciao mondo");

Abbiamo introdotto precedentemente la keyword new: gli oggetti una volta dichiarati (ad es: String testo; )  devono essere inizializzati chiamandone il "costruttore" tramite tramite l'uso di tale keyword. Il "costruttore" di un oggetto non è altro che un metodo che ha lo stesso nome della classe dell'oggetto e che prende in input i parametri che servono per inizializzare la nuova istanza.
Può sembrare complesso al momento ma quando andremo a scrivere la nostra prima classe - presumo nel prossimo articolo - tutto diventerà via via più chiaro.

Non introduciamo i metdodi della classe String (per gli interessati date un occhio alle API - può essere utile iniziare a fare confidenza con questo tipo di documentazione - qui), ci limitiamo a far vedere come anche gli oggetti possono essere utilizzati in combinazione con gli array nel seguente esempio:

1
2
3
4
5
6
7
8
String[] nomi = new String[3];
nomi[0] = "Pippo";
nomi[1] = new String("Paperino");
nomi[2] = "Pluto";
 
for(int i=0; i<nomi.length;i++){
  System.out.println(nomi[i]);
}

Come potete notare  quando si usano le stringhe si può "omettere" la chiamata al costruttore racchiudendo il testo direttamente tra virgolette ed assegnandolo alla variabile dichiarata di dipo String: questo perché Java interpreta tutte le sequenze di caratteri racchiuse tra virgolette come stringhe di testo.

Bene, adesso l'unico consiglio è quello di sperimentare un poco per prendere la mano con questi concetti basilari: prossimamente inizieremo ad occuparci degli oggetti di cui analizzeremo passo passo le componenti strutturali di base.

Stay Tuned!

Enhanced by Zemanta
Comments (0) Trackbacks (0)

Sorry, the comment form is closed at this time.

Trackbacks are disabled.