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

API standards et tierces Java Discussion :

Génération d'entiers relatifs


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Par défaut Génération d'entiers relatifs
    Bonjour @ tous !

    Je ne savais pas trop où poster vu qu'il y a pas mal de rubriques!

    Voilà, j'ai un soucis :

    J'aimerais remplir un tableau de 50 cases de manière aléatoire avec des nombres entiers relatifs aléatoires !

    Voici le code qui me pose 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
    25
     
    for(i=0; i<50; i++)
          //Génération d'un indice aléatoire compris entre 0 et 50
    	tmp = (int)(Math.random()*50);
          //Si la case d'indice généré plus tôt est vide
    	if(tab[tmp] == 0)
    	{
          //On la remplit avec un entier positif aléatoire
    		tab[tmp] = (int)(Math.random()*100);
    	}
          //Sinon le nombre d'itérations de la boucle augmente de 1
    	else
    	{
    		i--;
    	}
          // De meme pour les entiers négatifs
    	tmp = (int)(Math.random()*50);
    	if(tab[tmp] == 0)
    	{
    		tab[tmp] = (int)(Math.random()*-100);
    	}
    	else
    	{
    		i--;
    	}
    Problème ce code fonctionne mal, je pense que je rate une erreur grosse comme une maison mais là je sèche ...
    Un peu d'aide serait la bienvenue !

  2. #2
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    Salut
    Essai ceci pour générer un entier entre 0 et 50 inclus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Random r = new Random(Math.random()*10000);
    int number = r.nextInt(51);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Par défaut
    Je ne veux pas que 50 soit inclus puisque la derniere case du tableau a l'indice 49.

    Le code que j'ai mis ne remplit pas toutes les cases du tableau et je ne comprends pas pourquoi !

  4. #4
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    Peut etre parce que Math.random()*100 ca peut donner 0 si tu le converti en int donc a ce moment la t as l impression que ton tableau ne s'est pas remplit alors qu'il a été remplit avec 0.

    De plus, pour remplir ta case [49], ton Math.random doit tomber sur 0,98 ou plus, ce qui est une probabilité assez rare. Tu devrais vraiment utiliser l'objet random...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Par défaut
    Bon j'ai fais les modifications :

    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
    28
     
    int indice=0;
    int i=0;
    Random r = new Random();
    for(i=0; i<50; i++)
    	//Génération d'un indice aléatoire compris entre 0 et 50
    	indice = r.nextInt(50);
    	//Si la case d'indice généré plus tôt est vide
    	if(tab[indice] == 0)
    	{
    		//On la remplit avec un entier positif aléatoire
    		tab[indice] = (int)(Math.random()*72);
    	}
    	//Sinon le nombre d'itérations de la boucle augmente de 1
    	else
    	{
    		i--;
    	}
    	// De meme pour les entiers négatifs
    	indice = r.nextInt(50);
    	if(tab[indice] == 0)
    	{
    		tab[indice] = (int)(Math.random()*-72);
    	}
    	else
    	{
    		i--;
    	}
    Aucun changement, seules 2 ou 3 cases sont différentes de 0 ...

  6. #6
    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
    Par défaut
    Je ne comprends pas ton code... Tu es dans une boucle en i++ et tu fais un i-- dans le corps... o_O

    En gros, tu veux un tableau de 50 cases rempli avec des chiffres de -50 à 49?

    Si oui:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    final Random random = new Random();
    int tab[] = new int[50];
    for (int i = 0; i < tab.length; i++) {
    	tab[i] = random.nextInt(100) - 50;
    }

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Par défaut
    Pour être plus clair, je souhaite que chaque case soit choisie au hasard (entre 0 et 49) pour y mettre des entiers choisis eux-aussi au hasard (entre -99 et 99) !

    Je sais j'me complique la vie mais c'est juste un jeu !

  8. #8
    Invité de passage
    Inscrit en
    Décembre 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1
    Par défaut
    Salut, dans tes codes, j'ai l'impression que ta boucle "for" tire successivement 50 int dans le vent avant d'affectuer un random à une seule valeur... ne te manquerait-il pas une bonne paire d'accolades ?

  9. #9
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[indice] = (int)(Math.random()*72);
    Pas bien

    Ca c mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[indice] = r.nextInt(199)-99;

    Ce qui donne avec le code de rom (pourquoi remplir les cases dans le desordre ? )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    final Random random = new Random(); 
    int tab[] = new int[50]; 
    for (int i = 0; i < tab.length; i++) {  
       tab[i] = random.nextInt(199) - 99; 
    }

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 103
    Par défaut
    Salut,
    En effet cela ne présentes pas d'intérêt de remplir les cases en désordre.
    De plus tu vérifies qu'une case est vide si sa valeur est égale à 0 or tu génères des nombres entre -99 et 99 donc la case n'est pas forcément vide.

    Si tu veux absolument remplir dans un ordre aléatoire ton tableau, tu n'as qu'à créer une liste avec les 50 indices en en sélectionner un au hasard à chaque itération puis supprimer l'indice sélectionné de la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    final Random rnd=new Random();
    //construction tableau indices
    ArrayList<Integer> indices=new ArrayList<Integer>();
    for (int i = 0; i < 50; i++) {indices.add(i);}
    //sélection aléatoire des indices
    while(!indices.isEmpty()) {
    	System.out.println(indices.remove(rnd.nextInt(indices.size())));
    }

Discussions similaires

  1. Génération de tableau d'entiers et lettres alea : Triage ASC / DESC
    Par Ojiuiookojbezib dans le forum Contribuez
    Réponses: 0
    Dernier message: 02/12/2014, 10h06
  2. Réponses: 4
    Dernier message: 29/03/2011, 10h39
  3. Calcul du plus grand diviseur commun de deux entiers relatifs
    Par odsen.s dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 17h21
  4. Codage des entiers relatifs
    Par CompuTux dans le forum Mathématiques
    Réponses: 9
    Dernier message: 27/01/2010, 19h34
  5. Ecrire ensemble des entiers relatifs en Latex
    Par codepvc dans le forum Débuter
    Réponses: 2
    Dernier message: 22/05/2009, 09h23

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