Random identique

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. Modérateur
    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()));
    }
    1. 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]) ));
      [...]
      }
      
      
      
      1. Contributeur
        je ne vois pas exactement dans quelle classe cela se trouve.
        et ainsi?
        private static Random rand1 = new Random();
    2. D'accord, mais ça change pas mon problème, toute mes carte ont dans leur tableau les mêmes valeurs ...
      1. Contributeur
        tu ne fais plus new à chaque appel de la méthode, et tu as toujours le problème? peux-tu montrer ton code?
    3. Contributeur
      bonjour, je pense que rand1 suffit, et peut-être utilisé plusieurs fois.
      1. J'avais essayer juste avec rand1 au début mais j'ai le même résultat à la fin ...
      2. Contributeur
        @Hamster18je ne peux pas deviner comment tu fais avec uniquement rand1.
      3. @yg_becomme 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;
                    }
                }
        
        
      4. Contributeur
        @Hamster18il serait préférable de réutiliser rand1, sans faire new à chaque appel de la méthode.