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 :

Tableau 2 dimensions


Sujet :

avec Java

  1. #1
    Membre habitué
    Tableau 2 dimensions
    Bonsoir à tous,
    J'ai créé ce tableau :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    private double[][] taux = {{10,15,20,25,30,35,40},{0.8,1.2,1.54,2.83,2.99,3.40,3.99 }};


    J'ai besoin de parcourir que la "première dimension" si je peux dire ainsi soit {10,15,20,25,30,35,40} et si je trouve une équivalence aller dans la deuxième dimension {0.8,1.2,1.54,2.83,2.99,3.40,3.99 } en affectant la valeur de i à j soit :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(int i = 0; i < taux.length; i++){			 
    	if(taux[i]==ch3) { 
    				   int j=i;
    				   txtTaux.setText(String.valueOf(taux[j]));					
    			       } 
    			                    }

    Le problème est quand j'éxécute et que i s'incrémente (i=1) le débogueur m'indique tab[i] = 1.2 soit le deuxième élément de la deuxième dimension. Peut être que mon code n'est pas bon si quelqu'un a une idée. MERCI

  2. #2
    Modérateur

    Ce message n'a pas pu être affiché car il comporte des erreurs.
    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é
    Ce message n'a pas pu être affiché car il comporte des erreurs.

  4. #4
    Modérateur

    Citation Envoyé par xeron33 Voir le message

    Je veux pouvoir aller avec l'indice ou la valeur de i et en l'affectant à j aller récupérer la valeur de taux[j] (deuxième dimension). D'autre part
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
     if ( taux[0][i] == ch3 )
    ne marche pas car ch3 est un tableau de double à une dimension mais ça tu ne pouvais pas le savoir.
    Bah remplace ch3 par ch2. De toute manière il est impossible que taux[i]==ch3 soit vrai quelque soit i. Ce sont deux objets différents. Et ça n'a même aucun sens de chercher à tester l'égalité entre un tableau de 1 double et un tableau de 7 doubles !

    Citation Envoyé par xeron33 Voir le message

    - pourquoi au début de la boucle :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    for(int i = 0; i < taux.length; i++)
    taux[i] represente {10,15,20,25,30,35,40} soit le première dimension et puis ensuite après incrémentation de i taux[i] représente {0.8,1.2,1.54,2.83,2.99,3.40,3.99 } soit la deuxième dimension ?
    Parce que les premiers [] de taux représentent la première dimension. Un tableau à deux dimensions est un tableau de tableau. taux[i] c'est donc une ligne. quand i=0, c'est la première ligne (le premier tableau et quand i=1, c'est le second tableau, la deuxième ligne. Et quand on écrit taux[i][j] on dit qu'on accède à la cellule d'index j du tableau taux[i] qui est le tableau de position i dans taux.
    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é
    Citation Envoyé par joel.drigo Voir le message
    Bah remplace ch3 par ch2. De toute manière il est impossible que taux[i]==ch3 soit vrai quelque soit i. Ce sont deux objets différents. Et ça n'a même aucun sens de chercher à tester l'égalité entre un tableau de 1 double et un tableau de 7 doubles !



    Parce que les premiers [] de taux représentent la première dimension. Un tableau à deux dimensions est un tableau de tableau. taux[i] c'est donc une ligne. quand i=0, c'est la première ligne (le premier tableau et quand i=1, c'est le second tableau, la deuxième ligne. Et quand on écrit taux[i][j] on dit qu'on accède à la cellule d'index j du tableau taux[i] qui est le tableau de position i dans taux.
    *********************************************
    Ca marche maintenant avec un tableau de String :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    	private String[][] taux = {{"10","15","20","25","30","35","40"},{"0.8","1.2","1.54","2.83","2.99","3.40","3.99" }};
    	private String ch;

    et après tes infos j'ai pigé le fonctionnement des tableaux à plusieurs dimensions enfin je pense...
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void actionPerformed(ActionEvent e) {		
    			txtTaux.setText(cboAnnees.getSelectedItem().toString());
    			ch=cboAnnees.getSelectedItem().toString();
    			for(int i = 0; i < taux.length; i++){			 				  
    						for(int j=0;j < taux[i].length;j++) {
    							 if(taux[i][j]==ch) { 	
    						   txtTaux.setText(String.valueOf(taux[1][j]));

    MErci encore pour ton aide

  6. #6
    Modérateur

    Oui, enfin, attention :

    1. On ne teste jamais l'égalité entre chaînes de caractères avec ==, mais equals(). Tu peux avoir la chance que ça fonctionne si les deux instances sont effectivement les même (ici tu as peut-être cette chance parce que tu construis ta combo avec ton tableau. Il ne faut pas compter sur cette chance.
    2. Ensuite, je ne sais pas pourquoi tu t'évertues à parcourir les deux tableaux.
      Code :Sélectionner tout -Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      for(int i = 0; i < taux.length; i++){			 				  
      	for(int j=0;j < taux[i].length;j++) {
      		if(taux[i][j]==ch) { 	
      		    txtTaux.setText(String.valueOf(taux[1][j]));
                      }
              }
      }

      Il suffit de parcourir le premier qui contient les valeurs de ta combo
      Code :Sélectionner tout -Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      for(int i=0;i < taux[0].length;i++) {
      		if(taux[0][i].equals(ch)) { 	// si la valeur dans le premier tableau est égale à la valeur choisie
      		    txtTaux.setText(String.valueOf(taux[1][i])); // alors on affiche dans txtTaux, la valeur correspondante dans le second tableau
                      }
              }
    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.

  7. #7
    Membre habitué

    On ne teste jamais l'égalité entre chaînes de caractères avec ==, mais equals(). Tu peux avoir la chance que ça fonctionne si les deux instances sont effectivement les même (ici tu as peut-être cette chance parce que tu construis ta combo avec ton tableau. Il ne faut pas compter sur cette chance.
    Non je ne construit pas ma combo ou liste déroulante avec mon tableau :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
                    String[] annees= {"10","15","20","25","30","35","40"};
    		cboAnnees=new JComboBox<String>(annees);


    [*]Ensuite, je ne sais pas pourquoi tu t'évertues à parcourir les deux tableaux.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int i = 0; i < taux.length; i++){			 				  
    	for(int j=0;j < taux[i].length;j++) {
    		if(taux[i][j]==ch) { 	
    		    txtTaux.setText(String.valueOf(taux[1][j]));
                    }
            }
    }

    Il suffit de parcourir le premier qui contient les valeurs de ta combo
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=0;i < taux[0].length;i++) {
    		if(taux[0][i].equals(ch)) { 	// si la valeur dans le premier tableau est égale à la valeur choisie
    		    txtTaux.setText(String.valueOf(taux[1][i])); // alors on affiche dans txtTaux, la valeur correspondante dans le second tableau
                    }
            }


    ******************************************************
    Oui effectivement on peut le voir comme ça mais pour moi ça me semble plus logique ou plus adapté de parcourir le deuxième tableau surtout qu'on a "j" à notre disposition.
    Merci encore pour tes remarques et ton aide
    A+

  8. #8
    Modérateur

    Citation Envoyé par xeron33 Voir le message

    Oui effectivement on peut le voir comme ça mais pour moi ça me semble plus logique ou plus adapté de parcourir le deuxième tableau surtout qu'on a "j" à notre disposition.
    1. Cela ne l'est pas : on parcourt les structures qui contiennent les données qu'on traite. La tu parcours les deux lignes du tableau, alors que ta donnée en entrée ne fait partie que d'une des deux. Il n'y a rien de logique là dedans. Et quand tu parles de deuxième tableau, je suppose que tu parles de deuxième ligne : c'est encore moins logique, puisqu'elle ne contient justement aucune donnée sélectionnable dans la combo, donc ça ne sert à rien de la parcourir. Cela ne fonctionne que parce que quand tu parcours un tableau où la donnée ne s'y trouve pas, et bah, tu la trouve pas dedans.
    2. Et cet argument du j à dispo n'a rien à voir avec l'histoire. Si tu tiens à le faire avec deux tableaux avec correspondance des index (parce que ce n'est pas la meilleure façon de le faire, il faut le dire), il faut trouver l'index de la valeur en entrée dans le tableau qui contient cette valeur (donc parcourir ce tableau et pas un autre), et sortir la valeur de l'autre tableau à ce même index, qui lui n'a pas besoin d'être parcouru. Le fait d'avoir l'index à disposition ne justifie en rien de parcourir ce tableau.


    Citation Envoyé par xeron33 Voir le message
    Non je ne construit pas ma combo ou liste déroulante avec mon tableau :
    A la limite peu importe. On ne teste pas l'égalité d'instances d'objet avec == (qui est l'opérateur d'identité) mais avec equals(). Cela peut fonctionner parfois, dans certaines conditions, mais ce n'est pas général. Si tu ne veux pas avoir de problème à l'avenir avec des tests d'égalité faux, ne le fais pas, c'est tout.
    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.

  9. #9
    Membre habitué

    [*]Cela ne l'est pas : on parcourt les structures qui contiennent les données qu'on traite. La tu parcours les deux lignes du tableau, alors que ta donnée en entrée ne fait partie que d'une des deux. Il n'y a rien de logique là dedans. Et quand tu parles de deuxième tableau, je suppose que tu parles de deuxième ligne : c'est encore moins logique, puisqu'elle ne contient justement aucune donnée sélectionnable dans la combo, donc ça ne sert à rien de la parcourir. Cela ne fonctionne que parce que quand tu parcours un tableau où la donnée ne s'y trouve pas, et bah, tu la trouve pas dedans.

    [*]Et cet argument du j à dispo n'a rien à voir avec l'histoire. Si tu tiens à le faire avec deux tableaux avec correspondance des index (parce que ce n'est pas la meilleure façon de le faire, il faut le dire), il faut trouver l'index de la valeur en entrée dans le tableau qui contient cette valeur (donc parcourir ce tableau et pas un autre), et sortir la valeur de l'autre tableau à ce même index, qui lui n'a pas besoin d'être parcouru. Le fait d'avoir l'index à disposition ne justifie en rien de parcourir ce tableau.
    Oui effectivement tu as raison j'ai pris un peu de temps ce soir pour le comprendre, ta façon est effectivement plus logique, plus rapide.En tout cas pour ce qui est important c'est tu m'as permis de comprendre le fonctionnement d'un tableau multidimensionnel.
    Merci à toi encore pour le suivi
    A+

###raw>template_hook.ano_emploi###