Random identique

Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,
J'essaye d'initialiser automatique un tableau de int dans un objet carte ainsi j'ai ceci :
new Carte( [mes autres attributs ], initialiserTab(new int[3]) )


et la méthode initialiser tab comme ceci :
        Random rand1 = new Random();
        Random rand2 = new Random();
        Random rand3 = new Random();

         nb1 = rand1.nextInt(25);
         nb2 = rand2.nextInt(25);
         nb3 = rand3.nextInt(25);

        for (int i = 0; i < 3; i++) {
            tab[i] = nb1;
            if (i == 1) {
                tab[i] = nb2;
            }
            if (i == 2) {
                tab[i] = nb3*-1;
            }
        }


Mais mes nb1, nb2, nb3 sont identique pour toute mes cartes est j'en voie pas la raison ...
Merci d'avance pour votre aide.
Cordialement.

5 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, je pense que rand1 suffit, et peut-être utilisé plusieurs fois.
    0
    1. Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention  
       
      J'avais essayer juste avec rand1 au début mais j'ai le même résultat à la fin ...
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention  
         
        je ne peux pas deviner comment tu fais avec uniquement rand1.
        0
      2. Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        comme ceci :
        
                Random rand1 = new Random();
        
        
                 nb1 = rand1.nextInt(25);
                 nb2 = rand1.nextInt(25);
                 nb3 = rand1.nextInt(25);
        
                for (int i = 0; i < 3; i++) {
                    tab[i] = nb1;
                    if (i == 1) {
                        tab[i] = nb2;
                    }
                    if (i == 2) {
                        tab[i] = nb3*-1;
                    }
                }
        
        
        0
      3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention  
         
        il serait préférable de réutiliser rand1, sans faire new à chaque appel de la méthode.
        0
  2. Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention  
     
    D'accord, mais ça change pas mon problème, toute mes carte ont dans leur tableau les mêmes valeurs ...
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu ne fais plus new à chaque appel de la méthode, et tu as toujours le problème? peux-tu montrer ton code?
      0
  3. Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention  
     
    Voici le code exacte :
    
        int nb1;
        int nb2;
        int nb3;
        private Random rand1 = new Random();
    
        private int[] initialiserTab( int tab[]) {
             nb1 = rand1.nextInt(5)+5;
             nb2 = rand1.nextInt(5)+5;
             nb3 = rand1.nextInt(5)+5;
            for (int i = 0; i < 3; i++) {
                tab[i] = nb1;
                if (i == 1) {
                    tab[i] = nb2;
                }
                if (i == 2) {
                    tab[i] = nb3*-1;
                }
            }
            return tab;
        }
    
        public ListeCarte() {
            listeCarte.add(new Carte(1,"Droit", R.drawable.droit_des_femmes, "Voulez-vous donner le droit de vote aux femmes ?", initialiserTab(new int[3]) ));
            listeCarte.add(new Carte(2,"Guerre", R.drawable.guerre, "Les hommes cherchent sans cesse à s'entretuer. Voulez-vous leur en donner les moyens ?", initialiserTab(new int[3]) ));
    [...]
    }
    
    
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je ne vois pas exactement dans quelle classe cela se trouve.
      et ainsi?
      private static Random rand1 = new Random();
      0
  4. Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention  
     
    Non toujours pas , et c'est dans une classe listeCarte
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Plusieurs "corrections" pour éviter du code inutile (genre la boucle qui ne sert à rien, les variables globales à proscrire, etc.)

    private static final Random random = new Random();
    
    private static int[] randomArray() {
        return new int[] {
             random.nextInt(5)+5,
             random.nextInt(5)+5,
             random.nextInt(5)+5
        }
    }
    
    public ListeCarte() {
        listeCarte.add(new Carte(1, "Droit", R.drawable.droit_des_femmes, "Voulez-vous donner le droit de vote aux femmes ?", randomArray()));
        listeCarte.add(new Carte(2, "Guerre", R.drawable.guerre, "Les hommes cherchent sans cesse à s'entretuer. Voulez-vous leur en donner les moyens ?", randomArray()));
    }
    0