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. 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.
  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. 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();
  4. 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()));
    }