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

Collection et Stream Java Discussion :

bug de la matrice ArrayList<ArrayList<Float>>


Sujet :

Collection et Stream Java

  1. #1
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Points : 96
    Points
    96
    Par défaut bug de la matrice ArrayList<ArrayList<Float>>
    Bonjour,

    voila,
    j'ai un problème la valeur "tpi" que je passe au tableau "tempi" tempi.add(tpi);
    quand j'affecte à tpi= (float) (((2 * i +1) * u * 180) / 16); la pas de problème mais quand je la passe dans un ArrayList elle devine vide !!


    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    import java.util.ArrayList;
    
    public class Formule {
        
       public static void affiche_Mtrice(ArrayList<ArrayList<Float>> matrice) {
         ArrayList<Float> tps = new ArrayList();  
         for(int i=0; i< matrice.size(); i++)
         {    
           tps = matrice.get(i);
           System.out.println("\t"+tps.get(0)+"\t"+tps.get(1)+"\t"+tps.get(2)+"\t"+tps.get(3)+"\t"+tps.get(4)+"\t");  
         }
         /*
         for(ArrayList<Float> tab : matrice)  
         {
           for(float str : tab)
           {
           System.out.println("\t"+str);
           }
           System.out.println("\n");
         }  */ 
       }
        
        public static void main(String[] args) {
        // int i = 0,j=0,u=0,v=0;
         ArrayList<ArrayList<Float>> qi = new ArrayList(),
                                     qj = new ArrayList();
         //////////////////////////
        ArrayList<Float> tempi = new ArrayList(); 
        float tpi=0; 
        for(int u = 0; u < 8; u++)
        {
         for(int i =0; i < 8; i++)
         {
          tpi= (float) (((2 * i +1) * u * 180) / 16);  
          System.out.println("tpi= "+tpi);
    
          tempi.add(tpi);   // les valeur ne passpas la !!!??????????
    
          //tempi.add( ( ( (2 * (float)i +1) * (float)u * 180) / 16) );
          System.out.println("\t=="+tempi.get(i));  
         }
          qi.add(tempi);
        }
         /////////////////////////
         affiche_Mtrice(qi);
        /////////////////////////
     
        }
    
    }
    je ne comprenant pas le bug !!


    si quelqu'un peu m'aider.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par bilred Voir le message
    quand je la passe dans un ArrayList elle devine vide !!
    Ce que tu veux dire, c'est que ta liste ne semble contenir que des zéros. Pas qu'elle est vide.

    Eh bien, c'est tout à fait normal. Tu ne vois que des zéros à l'affichage parce que tu n'affiches que les éléments de ta liste qui valent zéro
    Explication...


    Déjà, tu n'affiches qu'une partie de ta liste dans la méthode affiche_Mtrice.
    Je te propose donc de la modifier ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void affiche_Matrice(ArrayList<ArrayList<Float>> matrice) {
    	for (int i=0; i< matrice.size(); i++) {
    		for (int j=0; j< matrice.get(i).size(); j++) {
    			System.out.print("\t" + matrice.get(i).get(j));
    		}
    		System.out.println();
    	}
    }
    Maintenant exécute ton code, et tu verras qu'en fait seuls les 8 "lignes" de ta matrice sont identiques, qu'elles contiennent 64 "colonnes" chacune, et que les 8 premières valeurs de chaque valent "0.0". Les valeurs suivantes, elles, sont bien différentes de zéro.

    Mais pourquoi ?
    Regardons ton bout de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ArrayList<Float> tempi = new ArrayList(); 
    float tpi=0; 
    for(int u = 0; u < 8; u++)
    {
      for(int i =0; i < 8; i++)
      {
        tpi= (float) (((2 * i +1) * u * 180) / 16);  
        System.out.println("tpi= "+tpi);
        tempi.add(tpi);   // les valeur ne passpas la !!!??????????
        System.out.println("\t=="+tempi.get(i));  
      }
      qi.add(tempi);
    }
    Tu utilise la même liste tempi tout au long de la double boucle.
    Et donc :
    - tu ajoutes les valeurs tpi 8*8 fois de suite dans la même liste tempi, ce qui expliques que les "lignes" de ta matrice contiennent 8*8 "colonnes"
    - tu ajoutes la même liste tempi 8 fois de suite dans la liste qi, ce qui explique que les 8 "lignes" de ta matrice soient identiques
    De plus, lors de l'affichage des valeurs insérées dans tempi, tu affiches tempi.get(i) alors qu'en réalité le nombre tpi a été inséré en position (8*u+i). Et donc tu n'affiches que les 8 premières valeurs insérées dans la liste, qui se trouvent être égales à zéro, au lieu d'afficher réellement le nombre que tu viens d'insérer dans la liste !
    Je te propose donc de modifier ainsi ton algorithme :
    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
    public static void main(String[] args) {
     
    	ArrayList<ArrayList<Float>> qi = new ArrayList<ArrayList<Float>>();
     
    	for (int u = 0; u < 8 ; u++) {
    		ArrayList<Float> tempi = new ArrayList<Float>();
    		for(int i = 0 ; i < 8 ; i++) {
    			float tpi = (float) (((2 * i +1) * u * 180) / 16);
    			System.out.println("tpi= " + tpi);
    			tempi.add(tpi);
    			System.out.println("\t==" + tempi.get(i));
    		}
    		qi.add(tempi);
    	}
     
    	affiche_Matrice(qi);
    }
    Maintenant exécute ton code, et cette fois-ci tu verras bien l'affichage au fur et à mesure des valeurs insérées dans la liste, et au final tu obtiendras bien une matrice de 8*8 lignes...


    EDIT : Et si tu te demandes encore pourquoi tes nombres sont arrondis alors que ce sont des float, va voir ou ou .

  3. #3
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Points : 96
    Points
    96
    Par défaut
    Merci Beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'ArrayList d'arrayList d'arrayList
    Par Shaina dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 25/02/2011, 11h04
  2. création de HashMap<ArrayList<String>, ArrayList<String>>
    Par Balbuzard dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/08/2008, 12h18
  3. Arraylist de Arraylists de strings
    Par PomFritz dans le forum C#
    Réponses: 6
    Dernier message: 31/05/2008, 12h03
  4. Arraylist d'Arraylists - comment la parcourir
    Par koktel_dfr dans le forum C#
    Réponses: 5
    Dernier message: 26/05/2008, 13h34
  5. [VB.NET] PB ArrayList.CopyTo(ArrayList)
    Par AbyssoS dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/04/2006, 12h51

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