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

avec Java Discussion :

Random qui se répète


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 29
    Points
    29
    Par défaut Random qui se répète
    bonjour les amis j'ai utilisé une fonction Math.random() pour avoir des valeurs aléatoire entre 0 et 393 mais quand j'affiche les résultats j’ai trouvé qu'il y'a des valeurs qui se réplique
    voici mon code :
    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
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package geneticalgo;
     
    import java.util.Arrays;
    import java.util.Collections;
     
    public class twesto {
        public static void main (String []argv){
          int [] zero =new int[259];
     
    int lower = 0;
    int higher = 393;
    int rand;
    for(int i=1;i<zero.length;i++){
    int random = (int)(Math.random() * (higher -lower) + lower) ;
    zero[i] =random;
    }
    Arrays.sort(zero);
    for(int i=1;i<zero.length;i++){
        System.out.print(" ");
        System.out.print(zero[i]);
    }
        }
    }
    et voici l'affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    run:
     2 2 6 7 7 12 13 15 21 22 27 27 27 28 29 32 33 34 35 37 39 39 42 42 45 50 51 52 55 56 58 58 59 60 62 62 63 67 67 69 70 72 73 75 78 79 81 81 84 88 90 91 92 94 96 96 99 103 103 109 109 109 110 113 114 114 117 117 119 120 122 123 123 123 124 126 126 128 129 131 132 132 135 136 136 137 137 138 139 140 142 143 145 147 147 148 148 150 150 152 153 156 156 156 158 162 163 166 168 168 169 171 173 174 175 176 177 179 180 187 190 191 193 193 195 197 198 199 200 200 201 203 203 206 211 212 213 214 216 217 219 219 220 221 223 223 227 230 230 232 232 234 234 234 237 243 244 245 245 249 253 255 255 256 256 258 259 259 261 262 264 264 267 267 270 270 270 272 273 273 273 275 276 277 280 281 284 285 286 289 289 290 291 292 292 294 295 295 295 296 298 298 299 305 306 309 317 318 318 322 324 328 329 329 332 335 335 336 337 340 343 344 345 349 351 351 352 354 356 357 357 358 359 360 364 366 367 368 369 369 374 374 375 376 377 379 381 382 382 383 383 384 384 385 385 386 391 392GÉNÉRATION TERMINÉE (durée totale* 2 secondes)
    j'aimerais bien trouver un astuce pour que les valeurs ne répètent pas

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    Bonjour,
    il est normal qu'il y ai des valeur qui se répète. La fonction random renvoi un nombre aléatoire, elle ne se préocuppe pas des nombre généré avant.

    Si tu souhaite tout les nombre de 0 à 393 dans un ordre aléatoire, tu pourrai par exemple faire un tableau les contenant tous, en sortir un aléatoirement du tableau, continuer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int low = 0;
    int high = 393;
    ArrayList<Integer> dispo = new ArrayList<Integer>();
    for(int i= low;i<high;i++){
      dispo.add(i);
    }
    for(int i=1;i<zero.length;i++){
    int random = (int)(Math.random() * dispo.size()) ;
    zero[i] =dispo.remove(random);
    }

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Utilise la classe Random.

    A+.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par fubuntu Voir le message
    Bonjour,
    il est normal qu'il y ai des valeur qui se répète. La fonction random renvoi un nombre aléatoire, elle ne se préocuppe pas des nombre généré avant.

    Si tu souhaite tout les nombre de 0 à 393 dans un ordre aléatoire, tu pourrai par exemple faire un tableau les contenant tous, en sortir un aléatoirement du tableau, continuer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int low = 0;
    int high = 393;
    ArrayList<Integer> dispo = new ArrayList<Integer>();
    for(int i= low;i<high;i++){
      dispo.add(i);
    }
    for(int i=1;i<zero.length;i++){
    int random = (int)(Math.random() * dispo.size()) ;
    zero[i] =dispo.remove(random);
    }
    merci mon ami c'est juste ça marche très bien merci

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    bon j'ai trouver un autre problème:
    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
    static Set destribution(int i,SymbolList dna,int taille){
    int table[]=new int[taille+1];
    Symbol [] zero =new Symbol[taille+1];
    //System.out.print(zero.length);
    Set symbols = new HashSet();
    int low = 0;
    int high = 393;
    ArrayList<Integer> dispo = new ArrayList<Integer>();
    for(i= low;i<high;i++){
      dispo.add(i);
    }
    for(i=1;i<zero.length;i++){
    int random = (int)(Math.random() * dispo.size()) ;
    table[i] =dispo.remove(random);
    }
    for(i=1;i<zero.length;i++){
    //int random = (int)(Math.random() * (higher -lower) + lower) ;//   (higher-lower)+ lower
    zero[i] =AlphabetManager.createSymbol(String.valueOf(table[i]), Annotation.EMPTY_ANNOTATION);
     symbols.add(zero[i]);
    }
     
     
    return symbols;   
    }
    et quand je fait appelle a cette fonction voici : résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     1 5 18 18 24 27 32 32 35 50 59 60 64 67 70 76 78 82 83 83 90 95 99 100 100 110 114 115 117 121 128 131 142 152 154 155 157 159 159 165 166 177 187 194 203 209 210 212 214 218 222 231 231 233 237 241 249 249 262 265 268 279 283 287 289 289 294 297 299 310 311 312 312 314 315 315 321 324 333 333 336 337 339 346 348 363 373 373 377 377GÉNÉRATION TERMINÉE (durée totale* 0 secondes)
    toujours il ya des valeurs qui se répète ??

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    C'est normal.

    Ne le prends pas mal, mais est-ce que tu comprends bien ce que tu fais ?

    Ici, tu crées un tableau d'une certaine taille, ensuite tu prends au hasard des valeurs dedans. Ainsi, tu as exactement le même problème qu'avant, c'est à dire que Math.random peut tirer des valeurs déjà sorties.

    Utilise donc la classe Random, solution préconisée par Andry.Aime.
    Une autre solution, selon moi, serait d'utiliser un Set d'Integer.
    Lis la documentation la-dessus.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Hizin Voir le message
    C'est normal.

    Ne le prends pas mal, mais est-ce que tu comprends bien ce que tu fais ?

    Ici, tu crées un tableau d'une certaine taille, ensuite tu prends au hasard des valeurs dedans. Ainsi, tu as exactement le même problème qu'avant, c'est à dire que Math.random peut tirer des valeurs déjà sorties.

    Utilise donc la classe Random, solution préconisée par Andry.Aime.
    Une autre solution, selon moi, serait d'utiliser un Set d'Integer.
    Lis la documentation la-dessus.
    justement comment utilisé la classe random ??

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Essaie de lire le java doc .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int high = 393;
    Random random = new Random();
    for (int i = 0; i < high; i++){
          System.out.println(random.nextInt(high+1));
    }
    A+.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Essaie de lire le java doc .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int high = 393;
    Random random = new Random();
    for (int i = 0; i < high; i++){
          System.out.println(random.nextInt(high+1));
    }
    A+.
    mon ami j'ai remarqué une chose quand je fait le tri avec Arrays;sort(tab); il répète les valeurs

  10. #10
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Il faudrait aller un peu lire la théorie sur les nombre aléatoire ... c'est un peu normal qu'il tire les même valeurs. Tri ou pas ...

    Imagine que tu aies un random qui te renvoye vrai ou faux, apres combien de tirage tu risque d'obtenir deja un truc tiré ? :p

    Apres au lieu d'un vrai faux, joue avec des chiffre de 1 a 10 etc ...

    Comme les autres personne te l'ont dit, si tu ne vx pas avoir de repetition, alors tire des nombre aléatoire pour remplir un tableau de X chiffres et tu remplis la tableau chaque fois qu'un chiffre tiré n'existe pas.

    Ou alors tu remplis un vecteur des chiffre qui vont de 0 a 399 (ou je ne sais plus) et tu le "Shuffle" tout simplement et tu recuperer les index de 0 a 399 puis tu recommence si nécessaire.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par anoir19 Voir le message
    mon ami j'ai remarqué une chose quand je fait le tri avec Arrays;sort(tab); il répète les valeurs
    Parce que tu n'exclues jamais les valeurs en question -_-°.

    Il serait plus simple d'avoir une List contenant toutes les valeurs possible, et de tirer au hasard un index de cette List, enlever la valeur qui s'y trouve et la garder. Puis, recommencer avec la List qui ne contient plus cette valeur et donc, ne la répètera pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. random qui retourne un mulitple de 5
    Par skysee dans le forum C++
    Réponses: 3
    Dernier message: 18/11/2007, 13h46
  2. Réponses: 3
    Dernier message: 22/06/2007, 14h17
  3. CSS texte qui se répète sur toutes les pages
    Par drogba-11 dans le forum Mise en page CSS
    Réponses: 24
    Dernier message: 13/05/2007, 21h49
  4. texte qui ce répète et Height non respecté sur IE6
    Par Strix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/04/2007, 16h16
  5. Data qui se répète
    Par sabrecoach dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 23/02/2007, 10h06

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