JAVA - for(type x : y)

Maya -  
 Maya -
Salut tout le monde,

j'ai une petite question concernant cette syntaxe avec un tableau a deux dimensions.
Pour traduire cette imbrication :
for(int i = 0; i<tableau.length; i++)
	for(int j = 0; j<tableau[i].length; j++)
		System.out.println(tableau[i][j]);

j'arrive a ca:
for(int[] tab : tableau)
	for(int var : tab)
		System.out.println(var);

mais si je veux traduire celle ci :
for(int i = 0; i<tableau[0].length; i++)
	for(int j = 0; j<tableau.length; j++)
		System.out.println(tableau[j][i]);

c'est possible ?

Merci d'avance :)

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Utilisée comme ça, la boucle for a le sens de for each (pour chaque), il faut donc comprendre que le traitement de la boucle est exhaustif, tous les éléments seront parcourus.

    Ce que tu veux faire c'est court-circuiter une partie des valeurs, donc tu vas devoir garder ton premier for tel quel, le deuxième par contre ne pose pas de problème.

    for(int i = 0; i<tableau[0].length; i++) 
        for(int[] tab : tableau) 
            System.out.println(tab[i]);

    Il faut cependant faire attention, car cette boucle ne marche pas toujours !
    Regarde par exemple ce que peux donner un tableau où il existe n tel que tableau[n].length est inférieur à tableau[0].length :

    int[][] tableau = new int[2][];
    
    tableau[0]=new int[3];
    	tableau[0][0]=4;
    	tableau[0][1]=5;
    	tableau[0][2]=6;
    
    tableau[1]=new int[2];
    	tableau[1][0]=7;
    	tableau[1][1]=8;
    			
    for(int[] tab : tableau)
    	for(int var : tab)
    		System.out.println(var);
    
    System.out.println();
    			
    for(int i = 0; i<tableau[0].length; i++)
    	for(int[] tab : tableau)
    		System.out.println(tab[i]);

    La confiance n'exclut pas le contrôle
    0
    1. Maya
       
      Merci beaucoup, j'y vois plus clair maintenant :)
      0