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 :

Les tableaux et la fonction aléatoire


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 12
    Points
    12
    Par défaut Les tableaux et la fonction aléatoire
    bonjour à tous...voilà je vous expose mon problème... tout d'abord mon bout de programme ressemble à ça...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int lower = 1; 
    int higher = 6; 
     
    int nombremonstres = (int)(Math.random() * (higher+1-lower)) + lower;
    int[] force = new int[nombremonstres]; //à chaque monstre on définit un niveau de force( on fait ça dans un tableau pour pouvoir différencier mieux les différentes données)
    System.out.println("il y a "+nombremonstres+"monstres");
    for (int i = 1; i <= nombremonstres; i++) {
    	force[i-1] = (int)(Math.random() * (higher+1-lower)) + lower;
    	System.out.println("monstre n°"+nombremonstres+",force niveau"+force[i-1]);
    }
    Le problème qui se pose à moi c'est que par exemple dans le tableau je peux très bien avoir deux foix la valeur 1 ou la valeur 2....
    enfin bref je suis compliqué ^^ je voudrais lui imposer une limite "tu tire au hasard mais si tu retires 1 plus de "n" fois tu retire une autre valeur..."
    mais ... auriez vous une idée sur la manière de le faire ? je ne connais pas vraiment bien la fonction Math.random() et pour tout vous avouer je viens tout juste de commencer le java...donc si vous avez des réponses à ma question merci d'avance^^....

  2. #2
    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
    C'est pas à Math.random() de s'en occuper... Si le hasard a décidé qu'une même valeur était tirée plusieurs fois de suite, ainsi soit-il, Math.random() s'en fiche, elle a fait son boulot.
    Si ça ne te convient pas, c'est à toi de le détecter et de refaire un autre tirage (mais bon, c'est pas très malin : sur un nombre d'essais assez grand, la répartition sera homogène. Il n'y a pas besoin de faire ce genre de choses, elles introduisent même un biais.)

    Note : la classe Random est sans doute plus facile à utiliser que la méthode Math.random(). Mais le problème sera le même : si tu veux gérer ça (et tu ne devrais pas le vouloir,) tu devras le détecter et retirer toi-même.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    merci de ta réponse Thelvin...il faudrait donc que je creé une classe random en spécifiant les limites et faire appel à cette fonction avec mon tableau ...^^' mince j'aurais cru qu'il y aurait plus simple mais bon je m'en doutais un peu.... seulement je ne vois pas du tout comment construire cette classe random...je ne vois en fait pas quoi mettre en condition pour qu'il me fasse un calcul différent...saurais-tu m'éclairer un peu plus ?

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Pour chaque case du tableau :
    1. début tant que : obtenir un nombre aléatoire,
    2. Compter le nombre de fois que l'on a obtenu ce nombre entre la première case et la case précédente en cours de traitement,
    3. Si le nombre de fois n'est pas atteint, affecter ce nombre aléatoire à la case du tableau et sortir de la boucle, sinon continuer la boucle.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    oups^^' je n'avais pas vérifier mais la méthode "random" existe déjà... qu'est-ce qu'elle apportte réellement ? je veux dire par apport à Maths.random ? comment je peux lui définir le maximum et le minimum des valeurs à prendre ?
    et surtout .... comment vais-je pouvoir m'en servir pour ce que je veux faire ?^^
    et oui il est vrai que normalement je ne devrait pas avoir ce besoin mais ... je suis compliqué >v<...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    bon je sais pas si j'ai correctement compris ce que tu m'as expliqué dinobogan... mais bon en tout les cas j'ai testé cela et... ça marche!!! (du moin sur les dix tests que j'ai fait ça a l'air de marcher...)le problème c'est que ça fait beaucoup de conditions ,ne peut on pas simplifier?
    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
     
    public static void  affichagemonstre(){
    		int lower = 1; 
    		int higher = 6; 
    	 int c1=0;
    	 int c2=0;
    	 int c3=0;
    	 int c4=0;
     
     
    		int nombremonstres = (int)(Math.random() * (higher+1-lower)) + lower;
    		int[] force = new int[nombremonstres]; //à chaque monstre on définit un niveau de force( on fait ça dans un tableau pour pouvoir différencier mieux les différentes données)
    		System.out.println("il y a "+nombremonstres+"monstres");
    		for (int i = 1; i <= nombremonstres; i++) {
    			while(true){
     
    			force[i-1] = (int)(Math.random() * (higher+1-lower)) + lower;
    			if(force[i-1]==1&&c1<1){c1++;break;}
    			if(force[i-1]==2&&c2<2){c2++;break;}
    			if(force[i-1]==3&&c3<3){c3++;break;}
    			if(force[i-1]==4&&c4<4){c4++;break;}
    			}
    			System.out.println("monstre n°"+i+",force niveau"+force[i-1]);
    		}
    		}

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ouhala.. tu aimes les choses compliquées. C'est simplifiable.
    Tu pourrais expliquer clairement les règles d'attribution d'une force pour un monstre ?
    D'après ce que j'ai compris, il y a maximum un monstre de force 1, maximum 2 monstres de force 2, ..., maximum N monstres de force N. C'est ça ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    oui c'est ça un monstres de niveau n apparait n fois... j'usqu'à n=4 puis après c'est 6 pour n = 5 et n=6 or comme il y a au maximum 6 monstres je ne le met pas en condition....

    Pourrais-tu m'expliquer comment le simplifier ? ^^

  9. #9
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Puisque tu as une relation directe entre le nombre de forces et la valeur de la force, ca devient assez simple.
    Je verrais un truc dans ce genre la :

    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
    public static void  affichagemonstre()
    {
      for (int i = 0; i <= nombremonstres; i++)
      {
        int max = 0;
        do
        {
          force[ i ] = (int)(Math.random() * (higher+1-lower)) + lower;
          max = 0;
          for( int n_force = i - 1 ; n_force >= 0 ; --n_force )
          {
            if( force[ n_force ] == force[ i ] ) { ++max; }
          }
        } while( max > i );
    }
    Reste à ajuster car je n'ai pas tester. Mais le principe est là.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    bon je n'y arrive pas avec ta méthode... j'ai essayer de changer des trucs pour voir si il y avait une erreur de contabilité mais... ...ça m'affiche des jolies erreurs ^^mais bon comme ma méthode marche je met le problème en résolu ...mais si tu pouvais tester ta méthode et me donner la correction ?... ce serait super^^ ... en tout cas merci pour tes indications et tes conseils qui m'ont permis d'y arriver...je vais pouvoir poser mon prochain problème maintenant...

  11. #11
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Je viens de tester, il n'y a que la borne supérieure de la boucle for à modifier
    Il faut un "<" au lieu d'un "<=" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for( int i = 0 ; i < nombremonstres ; i++ )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    oups merci effectivement je n'avais pas pensé que ça viendrait de là...
    en tout cas ça marche niquel merci

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

Discussions similaires

  1. [PHP 5.3] Fonction aléatoire sur tableaux
    Par Claire-Diane dans le forum Langage
    Réponses: 3
    Dernier message: 23/06/2011, 13h33
  2. fonction prédéfinie sur les tableaux
    Par yacin87 dans le forum Débuter
    Réponses: 1
    Dernier message: 01/03/2010, 19h18
  3. Réponses: 14
    Dernier message: 01/09/2003, 22h46
  4. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

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