Random identique

Signaler
Messages postés
137
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
25 mars 2020
-
KX
Messages postés
16141
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 mars 2020
-
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

Messages postés
10378
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 avril 2020
585
bonjour, je pense que rand1 suffit, et peut-être utilisé plusieurs fois.
Hamster18
Messages postés
137
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
25 mars 2020

J'avais essayer juste avec rand1 au début mais j'ai le même résultat à la fin ...
yg_be
Messages postés
10378
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 avril 2020
585 > Hamster18
Messages postés
137
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
25 mars 2020

je ne peux pas deviner comment tu fais avec uniquement rand1.
Hamster18
Messages postés
137
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
25 mars 2020
> yg_be
Messages postés
10378
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 avril 2020

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;
            }
        }

yg_be
Messages postés
10378
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 avril 2020
585 > Hamster18
Messages postés
137
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
25 mars 2020

il serait préférable de réutiliser rand1, sans faire new à chaque appel de la méthode.
Messages postés
137
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
25 mars 2020

D'accord, mais ça change pas mon problème, toute mes carte ont dans leur tableau les mêmes valeurs ...
yg_be
Messages postés
10378
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 avril 2020
585
tu ne fais plus new à chaque appel de la méthode, et tu as toujours le problème? peux-tu montrer ton code?
Messages postés
137
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
25 mars 2020

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]) ));
[...]
}


yg_be
Messages postés
10378
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 avril 2020
585
je ne vois pas exactement dans quelle classe cela se trouve.
et ainsi?
private static Random rand1 = new Random();
Messages postés
137
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
25 mars 2020

Non toujours pas , et c'est dans une classe listeCarte
Messages postés
16141
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 mars 2020
2 570
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()));
}