A › 11 - Tableaux

Les tableaux sont des variables qui permettent de "regrouper" plusieurs valeurs de même type. Leur intérêt est de faciliter la manipulation de l'ensemble des valeurs.

On peut créer des tableaux de tout type de variables : entier, décimaux, caractère, chaînes de caractères, booléens, etc. On peut même créer des tableaux de tableaux...

Déclarer un tableau

Comme toute variable, les tableaux doivent être déclarés en précisant leur nom et leur type. On peut soit les déclarer de façon préalable et leur affecter des valeurs ultérieurement, soit réaliser les deux opérations en une seule étape.

Le type d'un tableau est obtenu en accolant au type des variables qu'il contient les symboles [].

Par exemple, int [] score désigne un tableau d'entiers nommé "score" et String [] langage un tableau de chaînes de caractères nommé "langage".


  • Déclaration seule :

    L'instruction pour déclarer un tableau sans préciser les valeurs est : type [] nomTableau = new type[nombreDeValeurs] ;

    Par exemple : int [] score = new int[4] pour déclarer un tableau de 4 entiers nommé "score" ou String [] langage = new String[5] pour déclarer un tableau de 5 chaînes de caractères nommé "langage".

  • Déclaration et affectation simultanées :

    L'instruction générale est : type [] nomDuTableau = {valeur1, valeur2, ...} ;

    Par exemple : int [] score = {23, 45, 13, 35} ou String [] langage = {"C++", "Java", "PHP" , "Python", "Ruby"}

Accès aux valeurs du tableau

On accède aux valeurs du tableau grâce à la syntaxe nomDuTableau [indice] où indice est un entier compris entre 0 et "le nombre total de valeurs moins un". Attention, les valeurs étant indexées à partir de l'indice 0, la dernière valeur n'a pas pour indice le nombre total de valeurs, mais l'entier précédent.

    On peut lire ou modifier chaque valeur du tableau. Par exemple :

  • La première valeur du tableau "score" est obtenue par la syntaxe score[0]. Cette valeur, d'après la déclaration-affectation du paragraphe précédent, vaut 23.
  • La dernière valeur du tableau "score" est obtenue par la syntaxe score[3]. Elle vaut 35.
  • L'instruction score[1]=44 modifie la 2e valeur du tableau, en lui affectant la valeur 44.
  • La syntaxe langage[1] donne accès à la 2e chaîne du tableau "langage", c'est à dire "Java".
  • L'instruction langage[4]="Scala" modifie la 5e et dernière valeur du tableau, en lui affectant la chaîne "Scala".

Si l'on essaie d'affecter ou de lire une valeur d'indice supérieur à l'indice maximal déclaré, un message d'erreur apparaît lors de la phase de compilation du programme, contenant par exemple l'expression "ArrayIndexOutOfBoundsException", signalant qu'on a tenté de dépasser les bornes autorisées pour l'indice du tableau.

Longueur d'un tableau

Une fois qu'un tableau est créé, on peut accéder à sa longueur à l'aide de la syntaxe nomDuTableau.length.

Ainsi après la déclaration int [] score = {23, 45, 13, 35}, l'instruction println(score.length) affiche 4.

Et après la déclaration String [] langage = {"C++", "Java", "PHP" , "Python", "Ruby"} l'instruction println(langage.length) affiche 5.

Parcourir un tableau

Les boucles permettent de parcourir toutes les valeurs du tableau.

La syntaxe for (int i = 0; i < nomDuTableau.length ; i=i+1) crée une boucle où la variable i prend toutes les valeurs des indices du tableau.

Par exemple :

Exemple 1 : la boucle for sert ici à lire les valeurs du tableau "effectifs".

int[] effectifs={116, 97, 105, 158, 192, 173} ;

void setup(){

  size(250,250);

  background(255);

  fill(0, 50, 200);

}

void draw(){

  for( int i=0; i < effectifs.length ; i=i+1) {

    rect (10+i*39, 240-effectifs[i], 35, effectifs[i] ) ; // rectangles de hauteur effectifs[i] , de largeur 35, espacés de 39 pixels

  }

}

Exemple 2 : la boucle for sert ici à la fois à affecter les 50 valeurs du tableau et à les lire.

int[] valeurs= new int[50];

void setup(){

  size(250,250);

  stroke(200,50,0);

  strokeWeight(5);

}

void draw(){

  background(255);

  float alpha = mouseX/3.0;

  for( int i=0; i < valeurs.length ; i=i+1) {

    valeurs[i]=floor(sin(i*alpha)*alpha); // affectation des valeurs du tableau ; (floor = partie entière)

    point (i*5, 125-valeurs[i]); // lecture des valeurs du tableau

  }

}

Tableaux à plusieurs dimensions

Les tableaux à plusieurs dimensions sont des tableaux de tableaux.

Par exemple un tableau d'entiers à deux dimensions nommé "coordonnees" se déclare par int[][] coordonnees.

Ce tableau sera parcouru à l'aide de deux indices. On peut considérer que l'un des indices est l'indice de "ligne" et l'autre l'indice de "colonne", mais d'autres représentations sont possibles.

Une grille de cases aléatoirement noires ou blanches :

int[][] coordonnees= new int[4][5]; tableau de 4x5 valeurs

void setup(){

  size(250,250);

  frameRate(3);

}

void draw(){

  background(255); // fond blanc

  for ( int i=0; i < 4 ;i=i+1) { // indice de colonne

    for ( int j=0; j < 5 ;j=j+1) { // indice de ligne

      coordonnees[i][j]=floor(random(0,2)); // 0 ou 1, aléatoirement

      fill(coordonnees[i][j]*255); // niveau de gris valant 0 ou 255

      rect (25+50*i,50*j,50,50); // carré placé en colonne i, ligne j

    }

  }

}