Algorithmique et langage Java

Parcours d'un tableau

L'intérêt principale de regrouper des données dans un tableau est de pouvoir leur appliquer des traitements d'ensemble. Pour cela on aura besoin de parcourir le contenu du tableau, pour le lire ou le modifier. Les boucles bornées for sont le moyen le plus adapté pour ce faire. Les deux exemples ci-dessous utilisent des boucles for indicées pour affecter le contenu de tableaux, le lire et le modifier.

package initial;

public class ExempleDeTableau {
	public static void main(String[] args){
		ConsoleTexte mc=new ConsoleTexte();
		 //Création d'un tableau d'entiers vide, contenant 25 places 
		int[] monTableauDEntiers=new int[25]; 
		
		 //remplissage à l'aide d'une boucle 
		for (int i=0;i<25;i=i+1){
			monTableauDEntiers[i]=16*i; //l'élément d'indice i contiendra 16xi 
		}
		 //Affichage du contenu à l'aide d'une boucle 
		mc.ecritln("table de 16 jusqu'à 25x16");
      	    for (int i=0;i<25;i=i+1){
			mc.ecritln(monTableauDEntiers[i]);
		}
		
	}
}
Autre exemple :
package initial;

public class Palindrome {

	public static void main(String[] args) {
      ConsoleTexte mc=new ConsoleTexte();
	   //creation d'un tableau pouvant contenir 5 valeurs de type char 
      char[] tablechar=new char[5];
	  //remplissage par des données fournies par l'utilisateur, à l'aide d'une boucle 
     for (int i=0;i<5;i=i+1){
    	mc.ecritln("Entre un caractère");
    	tablechar[i]=mc.getChar();  	
      }
	  
	   // affichage du contenu dans l'ordre d'entrée 
     for (int i=0;i<5;i=i+1){
    	mc.ecrit(tablechar[i]);
     }
	    // affichage du contenu dans l'ordre inverse 
     for (int i=4;i>=0;i=i-1){
     	mc.ecrit(tablechar[i]);
      }
    }

}
Exercice 3 : Ecrire des boucles "for" permettant d'afficher le contenu des tableaux créés aux exercices 1 et 2, par ordre d'indice croissant puis dans l'ordre inverse.
On peut obtenir le nombre d'élément d'un tableau, sous la forme d'un entier int en écrivant le nom du tableau suivi d'un point et du mot "length".
Par exemple si on a créé un tableau nommé monTableau, monTableau.length désigne sa taille.
length est un champ du tableau.

Attention l'indice des éléments d'un tableau varie entre 0 et "length"-1

Exercice 4 :
Créer un tableau de caractères (char) de taille aléatoire comprise entre 10 et 50 (exclu)
Pour le tableau créé à l'exercice 3 : utiliser une boucle for et le champ length du tableau pour remplir ce tableau avec des caractères de code aléatoire compris entre 97 et 123 (exclu) et pour afficher ensuite le contenu du tableau.

Indication pour l'exercice 4 : On peut obtenir une valeur entière aléatoire comprise entre une valeur entière a et une valeur entière b (exclue) à l'aide du code (int)Math.floor(Math.random()*(b-a))+aa et b doivent être remplacés soit par des valeurs numériques entières soit par des variables entières ( explication).
Pour obtenir un caractère aléatoire il suffit de transtyper avec (char) au lieu de (int), ce qui nécessite aussi d'ajouter des parenthèses (char)(Math.floor(Math.random()*(b-a))+a).
Il existe une syntaxe spécifique de la boucle for (syntaxe "for each") , permettant de parcourir les tableaux et d'autres types structurés similaires comme les listes, en utilisant un nom de variable du même type que le contenu du tableau.

Par exemple pour afficher le contenu d'un tableau monTableau contenant des chaînes de caractères :

for (String s:monTableau){ // à l'intérieur de cette boucle, s désignera successivement chacun des éléments du tableau.
		mc.ecritln(s);     
}
Exercice 5 : Utiliser cette syntaxe pour afficher tous les caractères contenus dans le tableau créé à l'exercice 4.
Attention : ce type de boucle ne permet d'accéder aux éléments qu'en LECTURE SEULEMENT, elle ne permet pas de les modifier.
Exemple
package initial;

public class TableauChar {

	public static void main(String[] args) {
		ConsoleTexte mc=new ConsoleTexte();
		 // on crée un tableau de 15 caractères et on le remplit avec des lettres majuscules prises au hasard  
		char[] tablechar=new char[5];
		for (int i=0;i<15;i=i+1){
			tablechar[i]= (char)(Math.floor(Math.random()*(26))+65);  	
		}
		
		 // on affiche le contenu du tableau à l'aide d'une boucle for each  
		for (char c:tablechar) {
			mc.ecrit(c);
		}
		mc.ecritln();
		
		 // on parcourt le contenu à l'aide d'une boucle for each, en tentant de le modifier. On affiche au fur et à mesure le contenu avant et après modification, et celle-ci semble marcher... 
			for (char c :tablechar) {
			mc.ecrit(c);
			c='_';
			mc.ecrit(c);
		}
		mc.ecritln();
		
		 // et pourtant si on affiche à nouveau le contenu...  
		mc.ecritln();
		for (char c :tablechar) {
			mc.ecrit(c);
		}
		 // on constate qu'en fait il n'a pas changé  
	
	}

}
Détail du code de (int)Math.floor(Math.random()*(b-a))+a
  • Math.random() fournit une valeur réélle de type double r ∈[0;1[
  • Math.random()*(b-a) La multiplication par (b-a) fournit une valeur reélle de type double
    (b-a)×r ∈[0;(b-a)[
  • Math.floor(Math.random()*(b-a)) L'application de Math.floor à la valeur obtenue précédemment l'arrondit à la valeur entière inférieure, mais sans changer son type double.
  • (int)Math.floor(Math.random()*(b-a)) (int) transtype ensuite le résultat en un type entier. Le résultat de ce code est donc un entier ∈[0;b-a[
  • (int)Math.floor(Math.random()*(b-a))+a ajoute la valeur entière a. Le résultat de ce code est donc bien un entier ∈[a;b[
 
Licence Creative Commons
licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé
Auteur : Nathalie Bonnin
Professeur de Physique, Chimie, Informatique au lycée La Martinière Monplaisir (Lyon 8ème)
Contact :
nathalie.bonnin (chez) scientillula.net
Licence Creative Commons
La totalité du contenu du site Scientillula.net appartient à Nathalie Bonnin et est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé