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

Langage Java Discussion :

[Random] problème simple


Sujet :

Langage Java

  1. #1
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut [Random] problème simple
    Bonjour,

    J'avoue ne pas être très pro dans tout ce qui concerne les règles de gestions contenant des probabilités alors je vous pose un problème simple que je n'arrive pas a résoudre.

    je dois trouver deux chiffre a et b de manière aléatoire. Ils doivent répondre a ces trois critères :
    0 <= a <=1
    0 <= b <=1
    a + b <=1

    Je sais comment trouver un chiffre aléatoire entre 0 et 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Random generateur = new Random(new Date().getTime());
    double a = 0.0;
    double b = 0.0;
     
    a = generateur.nextDouble();
    b = // La je ne sais pas comment dire generateur.nextDouble(compris entre 0 et a);
    Si quelqu'un connait la solution, je suis preneur.

    Etre c'est etre relatif.

  2. #2
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Et si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    double a = Math.random() / 2.0; //0<= a <=0.5
    double b = Math.random() / 2.0; //0<= b <=0.5
    double c = a + b; //0<= c <=1
    ...
    Pushing the limits ...

  3. #3
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Citation Envoyé par nicgando
    Et si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    double a = Math.random() / 2.0; //0<= a <=0.5
    double b = Math.random() / 2.0; //0<= b <=0.5
    double c = a + b; //0<= c <=1
    ...
    Merci nicgando pour ta réponse,

    Mais ca ne réponds pas vraiment a ma question.

    Dans mon cas, a ou b peuvent très bien etre supérieur a 0.5.
    Etre c'est etre relatif.

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut
    ben tu fais une boucle:

    faire
    a <- random
    b <- random
    tant que a + b > 1
    Venez partager vos expériences au sein d'un projet sur slicesofit, agile & amélioration continue

  5. #5
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Deuxième essai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    double a = Math.random() ; //0<= a <=1
    double b = Math.random(); // 0<= b <=1
    double c = (a + b) / 2.0;   //  0<= c <=1
    Pushing the limits ...

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux simplement diminuer la valeur de b s'il est trop grand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Random generateur = new Random();
            double a = generateur.nextDouble();
            double b = generateur.nextDouble();
            if (a+b>1.) {
                b = 1. - a;
            }
    a++

  7. #7
    Membre habitué
    Avatar de jolatouf
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 170
    Points : 189
    Points
    189
    Par défaut
    Salut,

    sinon tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    double a = Math.random() ; //0<= a <=1
    double b = Math.random(); // 0<= b <=1
     
    while(b> 1-a)
    {
    b = Math.random(); // 0<= b <=1
    }
     
    ce qui nous fait 0<=  a <=1
                          0<=  b <=1-a
     
    a+b<=1
    et tu peux meme mettre un test aleatoire pour savoir si tu calcul B par rapport a A ou A par rapport a B comme ca A et B peuvent etre tres pres de 1 chacun leur tour
    visitez le site web des gîtes de France en basse Normandie à Hotot-en-Auge dans le Calvados http://www.hotot.fr

  8. #8
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut
    Citation Envoyé par jolatouf
    et tu peux meme mettre un test aleatoire pour savoir si tu calcul B par rapport a A ou A par rapport a B comme ca A et B peuvent etre tres pres de 1 chacun leur tour
    oui donc on en revient a ce que je disais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    double a;
    double b;
     
    do
    {
      a = Math.random();
      b = Math.random();
    }
    while (a + b > 1);
    ça sortira de la boucle si a + b <= 1
    Venez partager vos expériences au sein d'un projet sur slicesofit, agile & amélioration continue

  9. #9
    Membre habitué
    Avatar de jolatouf
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 170
    Points : 189
    Points
    189
    Par défaut

    C'est vrai Faiche,

    désolé

    On remarquera quand même comment j'aime me galérer sur mes tests !!!
    visitez le site web des gîtes de France en basse Normandie à Hotot-en-Auge dans le Calvados http://www.hotot.fr

  10. #10
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Il me semble que l'on peut faire ça sans boucle ni test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double a = Math.random();
    double b = (1 - a) * Math.random();
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  11. #11
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par le y@m's
    Il me semble que l'on peut faire ça sans boucle ni test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double a = Math.random();
    double b = (1 - a) * Math.random();
    Clair, j'allais proposer ceci...
    Une boucle pour cela, c'est un peu... beaucoup

    Attention cependant aux contraintes que tu as, car ici, clairement, A et B ne suivent pas la même loi de probabilité... (uniforme sur 0..1 et uniforme sur 0..1-a)

  12. #12
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Merci pour vos interventions la version de "le y@m's" me va très bien (même si je vois que la loi de proba appliqué à a et a b n'est pas la même).
    Etre c'est etre relatif.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ReentrantLock dans un problème simple
    Par FidoDido® dans le forum Langage
    Réponses: 8
    Dernier message: 06/01/2007, 16h42
  2. Problème simple de carte réseau
    Par Bayard dans le forum Matériel
    Réponses: 1
    Dernier message: 25/09/2006, 16h29
  3. Problème simple avec des checkbox
    Par nanor21 dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2006, 00h26
  4. [Javadoc]La Javadoc et un problème... simple mais paralysant
    Par lionrouge dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/12/2005, 00h00
  5. Problème simple d'apostrophe qui m'ennerve !
    Par beletteroi dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/09/2005, 21h58

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