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

Java Discussion :

[Stratégie] Génération d'un entier aléatoire dans un intervalle donné


Sujet :

Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 22
    Points
    22
    Par défaut [Stratégie] Génération d'un entier aléatoire dans un intervalle donné
    salut à tous
    je veux générer un entier dans un intervalle.
    le code suivant qui permet de générer un double àléatoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    public static void main(java.lang.String[] args) {
    System.out.println(" un nombre aléatoire = "+Math.random() );
    }
    Résultat :
    un nombre aléatoire = 0.8178819778125899.

    alors comment faire pour trouver un entier
    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Math.random fournit un nombre entre 0 et 1 si je ne me trompe pas. Mutlipliez par la plus grande valeur que vous voulez trouver puis arrondissez.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    myRandomInteger(int min, int max)
    {
        return (int) (min + Math.random() * (max - min + 1));
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    asticieuce l'idéé!!
    merci

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 147
    Points : 155
    Points
    155
    Par défaut
    Cette technique ne risque pas de produire 2 entiers identiques pour un retour de Math.Random assez proche du fait de l'arrondi ?

    Sinon y a toujours la bonne vieille technique du nombre de milliseconds (fonction currentTimeMillis il me semble) avec un modulo tout simple.

  5. #5
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Sinon il existe la classe java.util.Random et surtou la méthode nextInt(int)
    Bien le bonjour chez vous
    Jowo

  6. #6
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Citation Envoyé par BugFactory
    Math.random fournit un nombre entre 0 et 1 si je ne me trompe pas. Mutlipliez par la plus grande valeur que vous voulez trouver puis arrondissez.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    myRandomInteger(int min, int max)
    {
        return (int) (min + Math.random() * (max - min + 1));
    }
    il sert à quoi le "+1" ici ?
    si je prends min=0 et max =1 et si Math.random() retourne 1 alors le resultat final est 2 !!
    De plus je ne crois pas que ce soit la bonne manière de procéder en bidouillant ainsi car il y a un problème de probabilités aux bornes.
    Je n'ai pas chercher mais il y a peut-étre une classe qui traite de cela dans l'api.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  7. #7
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par afrikha
    Citation Envoyé par BugFactory
    Math.random fournit un nombre entre 0 et 1 si je ne me trompe pas. Mutlipliez par la plus grande valeur que vous voulez trouver puis arrondissez.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    myRandomInteger(int min, int max)
    {
        return (int) (min + Math.random() * (max - min + 1));
    }
    il sert à quoi le "+1" ici ?
    si je prends min=0 et max =1 et si Math.random() retourne 1 alors le resultat final est 2 !!
    De plus je ne crois pas que ce soit la bonne manière de procéder en bidouillant ainsi car il y a un problème de probabilités aux bornes.
    Je n'ai pas chercher mais il y a peut-étre une classe qui traite de cela dans l'api.
    Bonsoir Afrikha

    Lis mon poste concernant la méthode nextInt(int) de la classe java.util.Random
    Bien le bonjour chez vous
    Jowo

  8. #8
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Ok, donc il y a bien une classe qui s'en charge dans l'api.C'est bien ce qui me semblait.
    Morale de l'histoire: toujours chercher dans l'api avant de réinventer la roue


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    salut à nouveau
    en fait je voulais utilisais la génération d'entiers aléatoires pour afficher à chaque fois une nouvelle couleur de l'interface et ça marche pas la couleur reste toujours la même .
    moici le code que j ai untiliser :
    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
     
    public static void main(String[] args){
     
    Frame1 obj = new Frame1();
          int ii=(int) (Math.random() * 250); 
          int iii=(int) (Math.random() * 250); 
          int iiii=(int) (Math.random() * 250); 
     
     obj.statusBar.setBackground(new Color(ii, iii, iiii));
     
         System.out.println(ii);
         System.out.println(iii);
         System.out.println(iiii);
     
     obj.show();
    }
    je trouve en fait trois valeur aléatoire mais l'interface qui s'affiche a toujours la même couleur.

    merci pour tout coup de main

  10. #10
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    On dévie du sujet initial là.
    Un autre sujet dans le forum interfaces graphiques serait plus approprié.
    Sinon concernant ton probème, as-tu fait un repaint() sur ta stausbar ?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  11. #11
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 42
    Points : 50
    Points
    50
    Par défaut
    Salut!

    (Pour tout i € [0,1]) et (Pour tout a, b tq a < b) => ((a + i*(b-a)) € [a, b] (fonction affine strictement croissante (b-a > 0) en i) )

    Corollaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Math.random()[0,1] on a :
     
    (min + Math.random()*(max-min))[min, max]
    Pas question de probabilité (historique, martingale, sans risque,...) aux bords

  12. #12
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    désolé de continuer à poster sur le même sujet
    j'ai utiliser le repaint mais ça n'a rien donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    public static void main(String[] args){
     
    Frame1 obj = new Frame1();
     
        obj.statusBar.repaint();
     
        obj.show();
    }
    est ce bien ça ce que tu m'a demandé d'essayer ?
    thx

  13. #13
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    D'abord ,inutile d'écrire en gras monsieur le professeur, et puis si tu avais regarder le problème de plus près (notamment l'api de Math.random() ) tu aurais vu que Math.random() appartient à [0,1[.

    Réfléchis à ça un moment, et si tu ne vois toujours pas le rapport avec les probabilités, fais une recherche sur le forum algo.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  14. #14
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    @dracula2000

    tout d'abord il vaut mieux utiliser setVisible(true) que show().
    ensuite il faut appler repaint() sur un élément déjà afficher.
    enfin je ne vois pas ce que fait ton programme.
    Poste le code de frame1.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  15. #15
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    je vois que tu durcisses le ton
    primo je n'ai pas écris en gras
    secondo je m'attendais à une méthode directe pour retrouver un entier aléatoire.
    tertio mon probléme c pas la génération aléatoire mais le changement de couleur de l'arrière plan.
    quatrièment ou quatrio si ça existe ton idée ne marche pas concernat le repaint et je ne sais quoi .

    désolé normalement je devrais te remercier pour bien avoir voulu m'aider tout à l'heure mais je regrette ta dernière intervention vient de tout foutre en l'air .

    bon n'en faisons pas tout un plat

    bye

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 147
    Points : 155
    Points
    155
    Par défaut
    C'est un comble ca quand même.

    1 : C'est pas à toi qu'il parle ...
    2 : y en a une une dans le post, mais au cas ou elle est passée inapercu : nextInt
    3 : c'est pas ce que mentionne le titre du post
    4 : le repaint est une idée proposée, bon avec si peu d'éléments il est difficile de déterminer si c'est efficace pour résoudre ton problème

  17. #17
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    je viens de trouver ce qui ne marchais pas
    avat je faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    statusBar.setBackground(new new Color(ii, iii, iiii));
    alors que l'arriére plan c pas ça mais pluto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     int ii=(int) (Math.random() * 250); 
          int iii=(int) (Math.random() * 250); 
           int iiii=(int) (Math.random() * 250); 
           obj.setVisible(true);
     obj.panelCenter.setBackground(new Color(ii, iii, iiii));
    bon j'ai rien à rajouter sauf peut être merci

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

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  2. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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