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 :

Creation d'un vecteur d'entiers aleatoires compris entre 0 et 72:


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 81
    Points : 68
    Points
    68
    Par défaut Creation d'un vecteur d'entiers aleatoires compris entre 0 et 72:
    Bonjour,
    Je cherche à creer un vecteur d'entier contenant tous les entiers entre 0 et 72 (compris), mais dans un ordre aléatoire. J'ai programmé cela de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //		Creation d'un vecteur d'entiers aleatoires compris entre 0 et 72:
    		Random r = new Random();
    		Vector<Integer> g = new Vector<Integer>();  
    		int a;
    		int b;
    		while (g.size()!=72){
    			b = r.nextInt(72);
    			if (!g.contains(b))
    			{
    				g.addElement(b);
    			}
    }
    Ca vous parait correct?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    Pourquoi, ca marche pas?

    Par contre, si tu veux tous les entiers entre 0 et 72, ca en fait 73 en tout.
    donc je dirais plutot while(g.size()!=73)

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 81
    Points : 68
    Points
    68
    Par défaut
    je veux 73 entiers en tout ( je considere 0 comme un entier).
    En fait j'ai un message d'erreur quand j'execute le programme:

    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
    29
     	public LesCartes melanger() {
    //		Creation d'un vecteur d'entiers aleatoires compris entre 0 et 72:
    		Random r = new Random();
    		Vector<Integer> g = new Vector<Integer>();  
    		int a;
    		int b;
    		while (g.size()!=72){
    			b = r.nextInt(72);
    			if (!g.contains(b))
    			{
    				g.addElement(b);
    			}
    		}
    //		Creation d'un paquet de cartes melangé:
    		int i;
    		LesCartes paquet = this;
    		LesCartes paquetmel = new LesCartes(72);
    		for (i=0 ; i<73 ; i++)
    		{
    //			On prend le premier entier tire aleatoirement
    			a = g.elementAt(i);
    //			On met la carte dans le paquet melangé au rang correspondant a l'entier precedent
    			paquetmel.add(paquet.elementAt(i));
    			paquetmel.set(a, paquetmel.lastElement());
    //			On numerote la carte par son rang dans le paquet
    			paquetmel.firstElement().modnum(a+1);
    		}
    		return paquetmel;		
    }
    Et voila le message d'erreur que j'ai :
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 16 16 correspond au premier entier de mon vecteur d'entiers aléatoires
    at java.util.Vector.set(Unknown Source)
    at LesCartes.melanger(LesCartes.java:89) cela correspond à la methode dont tu as le code ci dessus, et la ligne 89 correspond à paquetmel.set(a, paquetmel.lastElement());
    at Main.main(Main.java:13) cela correspond à la ligne dans le main ou j'appelle la methode melanger

  4. #4
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 81
    Points : 68
    Points
    68
    Par défaut
    j'ai rajouté deux lignes pour savoir à quoi correspondait quoi dans le programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     			paquetmel.add(paquet.elementAt(i));
    			System.out.println(paquetmel.toString());
    			System.out.println(Integer.toString(paquetmel.size()));
    			paquetmel.set(a, paquetmel.lastElement());
    J'obtiens quelque chose que je ne comprends pas...
    [Or@42e816]
    1

    Je ne sais pas si "Or" correspond à quelque chose spécifique à Java ou pas, mais j'ai crée une classe Or, et il se peut qu'un objet du paquet soit un objet de la classe Or... Je ne sais pas s'il y a un rapport avec ce que renvoit le programme ou pas...
    Bref je nage

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    Déjà, si tu veux 73 entiers, il faut que tu mettes : (g.size()!=73) au lieu de (g.size()!=72)
    et LesCartes paquetmel = new LesCartes(73);
    au lieu de LesCartes paquetmel = new LesCartes(72); (enfin, je sais pas comment est fait ton constructeur, mais a priori..?)

    Et il y a quoi dans "paquet" ?
    Ta classe LesCartes elle est comment? Elle est extends vector en fait?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    puis c'est normal que ca plante.
    Ton paquetmel a une taille de 1 quand tu fais le set(a, paquetmel.lastElement());

    donc forcément, si a vaut est différent de zéro ca peut pas marcher...

  7. #7
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    S'il s'agit de mélanger aléatoirement un vecteur, ceci devrait suffire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Vector<Integer> vector = new Vector<Integer>(73);
     
    for(int i = 0; i < 73; i++)
    {
    	vector.add(new Integer(i));
    }
     
    Collections.shuffle(vector);
    Cela convient-il ?

  8. #8
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 81
    Points : 68
    Points
    68
    Par défaut
    J'ai corrigé tout ce que tu avais dit truc much:
    g.size()!=73
    et LesCartes paquetmel = new LesCartes(73);
    Effectivement la classe LesCartes herite de la classe vector<Carte>

    Pour le set, je pensais que cela mettait l'objet paquetmel.lastElement() à l'index a du LesCartes, mais pas que cela changeait la taille du vecteur, puisque a priori je le defini precedement comme etant un vecteur de taille 73.
    Comment dois-je faire alors pour placer la carte paquet.lastelement() au rang a dans le vecteur paquetmel ?

    jbonnard je vais essayer ce que tu as mis et je te dis ca tout de suite!

  9. #9
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 81
    Points : 68
    Points
    68
    Par défaut
    je viens d'essayer et effectivement cela fonctionne parfaitement!
    Merci pour cette nouvelle méthode!

  10. #10
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 81
    Points : 68
    Points
    68
    Par défaut
    Finalement ce que j'essayais de faire c'etait de melanger un vecteur de taille 73 aléatoiremen. Or la methode Collections.shuffle(vector) fonctionne directement sur l'objet LesCartes (qui appartient à une classe fille de Vector<Carte>) donc tout fonctionne!!!
    Merci beaucoup à tous les deux!!!

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

Discussions similaires

  1. [SQL] Creation d'une chaine de caractere aleatoire.
    Par Shakta dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/01/2008, 16h25
  2. [STL Vector]Creation d'un vecteur 2D
    Par franc82 dans le forum SL & STL
    Réponses: 4
    Dernier message: 18/04/2007, 11h59
  3. Remplir un tableau d'entier aleatoire
    Par argon dans le forum C
    Réponses: 10
    Dernier message: 16/03/2007, 00h13
  4. Nombre aléatoire compris entre deux bornes
    Par kokosnuss dans le forum Pascal
    Réponses: 2
    Dernier message: 03/12/2006, 23h07
  5. Réponses: 16
    Dernier message: 03/03/2006, 20h15

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