IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Tableaux l'indice et les l'éléments


Sujet :

avec Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut Tableaux l'indice et les l'éléments
    bonjour
    je vais que mon prg montre output comme ceci:
    (0,0) = 1 // 0,0 sont des indices et 1 est l'élément
    (1,0) = 4
    (0,1) = 2
    (1,1) = 5
    (0,2) = 3
    (1,2) = 6
    mais prg fait pas ce que je veux quelqu'un peux m'aider svp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public class Divers3 
    {
    	public static void main(String[] args) 
    	{
    	    int tab[][] = new int [2][3]; 
    	    int i, j, val;
    	    val = 1;
    	    for ( i = 0; i<2; i++ )
    	    {
    	      for ( j = 0; j<3; j++ )
    	      {
    	        tab [i] [j] = val;
    	        val = val+1;
    	        System.out.println("tab("+(i)+","+(j)+") = "+tab[i][j]);
    	     }
    	     System.out.println("");
    	   }
    	   for ( i=0; i<2; i++ )
    	   {
    	     for ( j=0; j<3; j++ )
    	     {
    	       tab [i] [j] = val;
    	       val = val+1;
    	       System.out.println("tab("+(i+1)+","+(j)+") = "+tab[i][j]);
    	     }
    	   }
    	   System.out.println("");
    	  } 
    	}

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Avant tout il faut définir dans (0,0) que représentent la première valeur et la seconde. Logiquement, le premier correspond à l'indice de la première dimension, qu'on appelle habituellement ligne. Le second correspond donc à la seconde dimension, appelée habituellement colonne.

    Dans la série suivante, on voit que l'indice de ligne évolue pendant que l'indice de colonne n'évolue pas, puis l'indice de colonne évolue, et on recommence la même boucle sur l'indice de ligne.
    (0,0) = 1 // 0,0 sont des indices et 1 est l'élément
    (1,0) = 4
    (0,1) = 2
    (1,1) = 5
    (0,2) = 3
    (1,2) = 6 
    On doit donc avoir une boucle sur les colonnes, avec à l'interieur une boucle sur les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int colonne=0; colonne<3; colonne++) {
       for( int ligne=0; ligne<2; ligne++) {
             System.out.println("("+ligne+","+colonne+")");
       }
    }
    Il faut absolument pouvoir se représenter comment le tableau est rempli :

    1 2 3
    4 5 6

    On voit donc que si on veut remplir le tableau avec des chiffres de 1 à 6, en incrémentant une variable, il faudrai remplir d'abord la première ligne, puis la seconde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int chiffre = 1;
    for (int ligne = 0; ligne < 2; ligne++) {
        for (int colonne = 0; colonne < 3; colonne++) {
           tab[ligne][colonne] = chiffre++;
        }
    }
    On peut également chercher à déterminer la ligne et la colonne en fonction du chiffre à placer : ligne=(chiffre-1)/3 et colonne=(chiffre-1)%3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int chiffre=1; chiffre<=6; chiffre++) {
        int ligne=(chiffre-1)/3;
        int colonne=(chiffre-1)%3;
        tab[ligne][colonne]=chiffre;
    }
    Cette manière de faire à l'avantage de ne pas créer de variables (chiffre en particulier) dont le scope s'étend inutilement à l'ensemble de la méthode.

    A noter que dans ton code, tu as bien 2 boucles, mais toutes les deux non seulement affichent le contenu du tableau, mais en plus remplissent le tableau en faisant évoluer la même variable (le second tableau est donc rempli de 7, 8, 9, 10, 11 et 12).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    merci pour vos aides
    la partie suivant que j'ai réussi ( les indices )
    tab(0,0)
    tab(1,0)
    tab(0,1)
    tab(1,1)
    tab(0,2)
    tab(1,2)
    mais, partie éléments je n'arrive pas le faire les composants
    1,4,2,5,3,6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                    int tab[][] = new int [2][3]; 
    	        int  val;
    	        val = 1;
    	        for( int j = 0 ; j < 3 ; j++ )
    	        {
    	            for( int i = 0 ; i < 2 ; i++ )
    	            {
    	                tab[i][j] =val+1*3+j+1;
    	                //val=j/3 ;
    	                System.out.println("tab(" + i + "," + j + ") = " + tab[i][j] );
    	            }
    	        }
    aidez moi svp

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ok, parce que tu dois le faire une seule boucle, je suppose ?

    Ton problème vient du fait que tu essayes de mélanger un procédé incrémental de 1 à 6 avec val, et un procédé par calcul. Déjà, on a vu que le procédé incrémental ne fonctionnait que si on parcourait les colonnes à l'intérieur des lignes :

    • ligne 0 : 1, 2, 3
    • ligne 1: 4, 5, 6


    Ensuite, soit on utilise un procédé incrémental, soit on utilse un calcul (On peut peut-être mélanger les 2, mais c'est se compliquer la vie).

    Repartons du tableau à obtenir :

    1 2 3
    4 5 6

    Pour le procédé par calcul, c'est simple :

    Déjà on traite le problème pour des valeurs dans un intervalle commençant à 0 (parce que les indices commencent à 0).
    • si on multiplie l'indice de ligne par le nombre de colonnes, on obtient la première valeur de chaque ligne, puisque le nombre de colonnes est la longueur des lignes.
    • ensuite il suffit d'ajouter l'indice de la colonne pour avoir la valeur, puisque la colonne d'indice n est n cases plus loin que celle d'indice 0


    Donc la formule est :

    Comme les valeurs vont de 1 à 6 au lieu de 0 à 5, on va ajouter 1 pour décaler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int[][] tab = new int [2][3]; 
     
    for( int j = 0 ; j < 3 ; j++ ) {
     
       for( int i = 0 ; i < 2 ; i++ ) {
     
           tab[i][j] =  1 + i*3 + j;
     
           System.out.println("tab(" + i + "," + j + ") = " + tab[i][j] );
       }
    }

    Pour le procédé incrémental ce n'est pas faisable en une seule variable.

    On voit que les chiffres évolue donc en lignes de 1 en 1 : 1, 2, 3 ou 4, 5, 6. Comme 4 = 3+1, on peut le faire avec une seule variable, lorsqu'on parcourt chaque ligne l'une après l'autre, et pour chaque ligne chaque colonne l'une après l'autre. Mais on pourrait traiter chaque ligne séparémment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    for( int i = 0 ; i < 2 ; i++ ) {
     
       int val;
       if ( j=0 ) {
           val=1;
       }
       else {
           val=4;
       }
     
       for( int j = 0 ; j < 3 ; j++ ) {
     
            tab[i][j] = val++;
    	System.out.println("tab(" + i + "," + j + ") = " + tab[i][j] );
     
       }
     
    }
    On peut intialiser val par calcul aussi, en utilisant exactement les mêmes règles que pour la solution par calcul :

    • 1 + pour le décalage
    • et * 3 parce que 3 colonnes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for( int i = 0 ; i < 2 ; i++ ) {
     
       int val = 1 + i*3; 
     
       for( int j = 0 ; j < 3 ; j++ ) {
     
            tab[i][j] = val;
    	System.out.println("tab(" + i + "," + j + ") = " + tab[i][j] );
            val++;
     
       }
     
    }
    Mais on doit faire ça en parcourant les lignes une à une dans chaque colonne. Regardons pour chaque colonne comment la valeur évolue :

    • 1, puis 4 (4-1=3)
    • 2, puis 5 (5-2 = 3)
    • 3, puis 6 (6-3 = 3)


    On voit que ça s'incrémente de 3 en 3.

    Ensuite déterminons la première valeur de chaque colonne : 1, puis 2, puis 3. C'est tout simplement l'indice de la colonne plus 1 (le décalage).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for( int j = 0 ; j < 3 ; j++ ) {
     
       int val = 1+j; 
     
       for( int i = 0 ; i < 2 ; i++ ) {
     
          tab[i][j] = val;
          System.out.println("tab(" + i + "," + j + ") = " + tab[i][j] );
          val+=3;
     
       }
     
    }
    Au final, on obtient la même formule (au lieu de multiplier i par 3, on ajoute 3 à chaque itération de i, ce qui est la définition de la multiplication) que dans le procédé par calcul (heureusement), mais en utilisant une variable. Autant utiliser le système par calcul.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    merci beaucoup, personne peut faire mieux que vous
    j'ai bien compris, merci encore

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/05/2007, 14h42
  2. Réponses: 1
    Dernier message: 21/04/2007, 16h36
  3. Réponses: 5
    Dernier message: 18/10/2006, 14h52
  4. probl. avec les tableaux d'indices de sommets
    Par kagemusha dans le forum OpenGL
    Réponses: 2
    Dernier message: 04/07/2006, 19h41
  5. Récupérer les différents éléments Internet et Mail
    Par mdriesbach dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 31/10/2005, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo