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 :

Erreur impossible à résoudre : java.lang.NullPointerException


Sujet :

avec Java

  1. #1
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Par défaut Erreur impossible à résoudre : java.lang.NullPointerException
    Bonjour à tous!

    Pourriez-vous me donner un peu d'aide ? Depuis 3 jours je bloque sur une erreur que je ne comprend pas. J'ai essayé de modifier mon code à au moins 10 reprises, mais rien il n'y a rien à faire j'ai toujours cette fameuse erreur : java.lang.NullPointerException.
    Pourrivez-vous me dire comment m'en débarrasser ?

    Eclipse m'indique que l'erreur vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((carte.couleur.equals(couleur)==true) & (carte.hauteur.equals(hauteur)==true))
    Pour résumer : mon code sert à générer automatiquement 52 cartes -uniques-. Et avant de générer une nouvelle carte, je regarde si la carte n'est pas déjà présente dans la liste dans laquelle j'ajoute les cartes générées. (mon HashTable)

    Merci pour votre aide !!



    Voici mon code (ça peut toujours servir )


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    import java.util.Hashtable;
     
     
     
     
    public class TestDistributionCartes {
    	public static void main (String args[]) {
    		String hauteur,couleur = null;
     
    		Hashtable<Integer, Carte> cartesGenerees = new Hashtable(); // contiendra la liste des cartes déjà génerées
    		// afin de de ne pas générer deux fois la même carte, on regardera dans ce hashtable
     
    		// génère 15 cartes aléatoires
    		for(int i=0;i<51;i++) {
     
    			int chiffeEntreUnetQuatre = (int) Math.round(10*Math.random()%4);
    			while(chiffeEntreUnetQuatre==0) {
    				chiffeEntreUnetQuatre = (int) Math.round(10*Math.random()%4);
    			}
     
    			int chiffeEntreUnetTreize = (int) Math.round(100*Math.random()%13);
    			while(chiffeEntreUnetTreize==0) {
    				chiffeEntreUnetTreize = (int) Math.round(100*Math.random()%13);
    			}
     
    			hauteur = String.valueOf(chiffeEntreUnetTreize);
    			if(chiffeEntreUnetTreize==11) { hauteur = "Valet";}
    			if(chiffeEntreUnetTreize==12) { hauteur = "Dame";}
    			if(chiffeEntreUnetTreize==13) { hauteur = "Roi";}
    			if(chiffeEntreUnetTreize==1) { hauteur = "As";}
     
    			if(chiffeEntreUnetQuatre==1) { couleur = "Coeur";}
    			if(chiffeEntreUnetQuatre==2) { couleur = "Carreau";}
    			if(chiffeEntreUnetQuatre==3) { couleur = "Pique";}
    			if(chiffeEntreUnetQuatre==4) { couleur = "Trefle";}
    			System.out.println("\n"+hauteur+"\t"+couleur);
     
    			// vérifie que la carte n'est pas déjà dans la liste "cartesGenerees" avant de l'y ajouter
    			if(i==0) { cartesGenerees.put(i, new Carte(hauteur,couleur)); }
    			else {
    				int taille = cartesGenerees.size();
    				Carte carte = null;
    				boolean carteTrouvee = false;
     
     
    				for(int j=0;j<taille;j++) {
     
    					carte = (Carte)cartesGenerees.get(j);
     
    					// si la hauteur et la couleur générées sont déjà dans la HashTable, alors...
    					if((carte.couleur.equals(couleur)==true) & (carte.hauteur.equals(hauteur)==true)) {
    						carteTrouvee=true;
    						System.out.println("#->"+carte.hauteur+"\t"+carte.couleur);
    					}
    					else {
    						System.out.println("->"+carte.hauteur+"\t"+carte.couleur);
    					}
    				}
     
    				//*
    				System.out.println("carteTrouvee = "+carteTrouvee);
    				if(carteTrouvee==false) {
    					System.out.println("On ajoute la carte "+hauteur+" de "+couleur+". i:"+i);
    					cartesGenerees.put(i, new Carte(hauteur,couleur));
    				}
    				if(carteTrouvee==true) {
    					System.out.println("on n'ajoute rien...");
    				}
    				//*/
    			}
    		}
    	}
    }

  2. #2
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Salut !

    3 possibilités :
    1) carte est null
    2) carte.couleur est null
    3) carte.hauteur est null

    Attention aussi à ton "ET" logique, il faut 2 "&" en Java.

    Si tu utilises Eclipse, sers-toi de son mode debug, super pratique




    EDIT: rien ne me choque... Poste le code de ta classe Carte, on ne sait jamais !

  3. #3
    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 : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Le problème est là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    carte = (Carte)cartesGenerees.get(j);
    carte est null si la carte n'est pas présente dans ta HashTable.

    Tu t'y prends très mal pour générer 15 cartes aléatoirement.

    Une méthode parmi d'autres :
    1. construit un tableau avec les 52 cartes,
    2. parcours ton tableau, pour chaque case, échange-la avec une autre case prise aléatoirement,
    3. prend les 15 premières cases de ton tableau.

    A la fin de cet algo, tu es assuré d'avoir 15 cartes différentes et mélangées.
    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.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Sympa le titre...Impossible, je m'y risque pas alors..

    Ceci dit le ET logique en JAVA c'est && et non pas &.

  5. #5
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Salut,

    Juste pour rajouter à ce qu'à dit DevTeam_
    Sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((carte.couleur.equals(couleur)==true) & (carte.hauteur.equals(hauteur)==true))
    Je l'écrirai plutot ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(couleur.equals(carte.couleur) && hauteur.equals(carte.hauteur))
    Pourquoi:
    - Parce qu'avant ton test, tu as bien initialisé couleur et hauteur comme des String non null; ce qui permet d'éviter le NullPointerException sur le equals (Rappel String.equals(null) ca passe; null.equals(String) NullPointer )
    - De plus, un peu de cours de logique : faire carte.couleur.equals(couleur)==true est redondant. (true == true donne true, false == true donne false)

  6. #6
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, je ne vois pas trop l'utilité d'utiliser une HashTable<Integer, Carte>, tu devrais plutôt utiliser simplement un tableau ou bien une ArrayList.

    L'avantage d'utiliser une collection est que tu as des interfaces utiles comme par exemple contains(Object o), qui te dira si la liste contient la carte donnée. (à condition de surchager la méthode equals dans la classe Carte)

  7. #7
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Par défaut
    Tout d'abord, merci à tous d'avoir répondu

    1er point:
    Citation Envoyé par dinobogan Voir le message
    carte est null si la carte n'est pas présente dans ta HashTable.
    Il ne me semble pas. Car pour chaque i, je prend la valeur de la carte. En gros je parcours tout mon Hashtable

    2ème point:
    Citation Envoyé par DevTeam_
    3 possibilités :
    1) carte est null
    2) carte.couleur est null
    3) carte.hauteur est null
    J'y ai pensé. J'ai testé et aucun n'est nul !

    3ème point:
    Merci Zorm pour ta réponse, mais ce if là ne change rien au problème.


    Avez-vous d'autres idées ?
    Edit: Je n'ai pas utilisé de tableaux car je n'ai jamais vu comment les manipuler.
    --------


    Pour vous donner un exemple d'exécution, en voici un :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    5	Coeur
     
    8	Carreau
    carte.hauteur = 5	 carte.couleur = Coeur
    ->5	Coeur
    carteTrouvee = false
    On ajoute la carte 8 de Carreau. i:1
     
    6	Coeur
    carte.hauteur = 5	 carte.couleur = Coeur
    ->5	Coeur
    carte.hauteur = 8	 carte.couleur = Carreau
    ->8	Carreau
    carteTrouvee = false
    On ajoute la carte 6 de Coeur. i:2
     
    8	Pique
    carte.hauteur = 5	 carte.couleur = Coeur
    ->5	Coeur
    carte.hauteur = 8	 carte.couleur = Carreau
    ->8	Carreau
    carte.hauteur = 6	 carte.couleur = Coeur
    ->6	Coeur
    carteTrouvee = false
    On ajoute la carte 8 de Pique. i:3
     
    7	Carreau
    carte.hauteur = 5	 carte.couleur = Coeur
    ->5	Coeur
    carte.hauteur = 8	 carte.couleur = Carreau
    ->8	Carreau
    carte.hauteur = 6	 carte.couleur = Coeur
    ->6	Coeur
    carte.hauteur = 8	 carte.couleur = Pique
    ->8	Pique
    carteTrouvee = false
    On ajoute la carte 7 de Carreau. i:4
     
    5	Pique
    carte.hauteur = 5	 carte.couleur = Coeur
    ->5	Coeur
    carte.hauteur = 8	 carte.couleur = Carreau
    ->8	Carreau
    carte.hauteur = 6	 carte.couleur = Coeur
    ->6	Coeur
    carte.hauteur = 8	 carte.couleur = Pique
    ->8	Pique
    carte.hauteur = 7	 carte.couleur = Carreau
    ->7	Carreau
    carteTrouvee = false
    On ajoute la carte 5 de Pique. i:5
     
    3	Coeur
    carte.hauteur = 5	 carte.couleur = Coeur
    ->5	Coeur
    carte.hauteur = 8	 carte.couleur = Carreau
    ->8	Carreau
    carte.hauteur = 6	 carte.couleur = Coeur
    ->6	Coeur
    carte.hauteur = 8	 carte.couleur = Pique
    ->8	Pique
    carte.hauteur = 7	 carte.couleur = Carreau
    ->7	Carreau
    carte.hauteur = 5	 carte.couleur = Pique
    ->5	Pique
    carteTrouvee = false
    On ajoute la carte 3 de Coeur. i:6
     
    6	Coeur
    carte.hauteur = 5	 carte.couleur = Coeur
    ->5	Coeur
    carte.hauteur = 8	 carte.couleur = Carreau
    ->8	Carreau
    carte.hauteur = 6	 carte.couleur = Coeur
    #->6	Coeur
    carte.hauteur = 8	 carte.couleur = Pique
    ->8	Pique
    carte.hauteur = 7	 carte.couleur = Carreau
    ->7	Carreau
    carte.hauteur = 5	 carte.couleur = Pique
    ->5	Pique
    carte.hauteur = 3	 carte.couleur = Coeur
    ->3	Coeur
    carteTrouvee = true
    on n ajoute rien...
     
    9	Trefle
    carte.hauteur = 5	 carte.couleur = Coeur
    ->5	Coeur
    carte.hauteur = 8	 carte.couleur = Carreau
    ->8	Carreau
    carte.hauteur = 6	 carte.couleur = Coeur
    ->6	Coeur
    carte.hauteur = 8	 carte.couleur = Pique
    ->8	Pique
    carte.hauteur = 7	 carte.couleur = Carreau
    ->7	Carreau
    carte.hauteur = 5	 carte.couleur = Pique
    ->5	Pique
    carte.hauteur = 3	 carte.couleur = Coeur
    ->3	Coeur
    carteTrouvee = false
    On ajoute la carte 9 de Trefle. i:8
     
    4	Trefle
    carte.hauteur = 5	 carte.couleur = Coeur
    ->5	Coeur
    carte.hauteur = 8	 carte.couleur = Carreau
    ->8	Carreau
    carte.hauteur = 6	 carte.couleur = Coeur
    ->6	Coeur
    carte.hauteur = 8	 carte.couleur = Pique
    ->8	Pique
    carte.hauteur = 7	 carte.couleur = Carreau
    ->7	Carreau
    carte.hauteur = 5	 carte.couleur = Pique
    ->5	Pique
    carte.hauteur = 3	 carte.couleur = Coeur
    ->3	Coeur
    Exception in thread "main" java.lang.NullPointerException
    	at TestDistributionCartes.main(TestDistributionCartes.java:49)

  8. #8
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Par défaut
    et voici ma classe carte au cas où...

    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
    import java.util.Vector;
     
    public class Carte {
     
    	public String hauteur;
    	public String couleur;
    	public Vector Jeu;
     
    	//constructeur de Carte
    	Carte(String hauteurCarte,String couleurCarte) {
    		hauteur = hauteurCarte;
    		couleur = couleurCarte;
    	}
     
     
    public void setHauteur(String hauteur ){
    	this.hauteur = hauteur;
    }
     
     
    public void setCouleur(String couleur ){
    	this.couleur = couleur;
    }
     
    }

  9. #9
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Salut,

    Je ne sais pas d'où te viens ce null mais il est là.

    Je pense que tu fait un peu compliqué. Il y a plus simple en utilisant les somptueuses possibilités de l'objet. Il convient de redéfinir la méthode equals de ton objet Carte et ensuite tu peux te servir de la méthode containsValue de la Map. Le tout tient alors en quelques lignes. En espérant avoir pu t'aider...

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
     
    public class TestDistributionCartes {
    	public static void main(String args[]) {
    		String hauteur, couleur = null;
     
    		Map<Integer, Carte> cartesGenerees = new HashMap<Integer, Carte>();
     
    		for (int i = 1; i <= 51; i++) {
     
    			boolean tirerUneCarte = true;
    			while (tirerUneCarte) {
    				int chiffeEntreUnetQuatre = (int) Math
    						.round(10 * Math.random() % 4);
    				while (chiffeEntreUnetQuatre == 0) {
    					chiffeEntreUnetQuatre = (int) Math
    							.round(10 * Math.random() % 4);
    				}
     
    				int chiffeEntreUnetTreize = (int) Math.round(100 * Math
    						.random() % 13);
    				while (chiffeEntreUnetTreize == 0) {
    					chiffeEntreUnetTreize = (int) Math.round(100 * Math
    							.random() % 13);
    				}
     
    				hauteur = String.valueOf(chiffeEntreUnetTreize);
    				if (chiffeEntreUnetTreize == 11) {
    					hauteur = "Valet";
    				}
    				if (chiffeEntreUnetTreize == 12) {
    					hauteur = "Dame";
    				}
    				if (chiffeEntreUnetTreize == 13) {
    					hauteur = "Roi";
    				}
    				if (chiffeEntreUnetTreize == 1) {
    					hauteur = "As";
    				}
     
    				if (chiffeEntreUnetQuatre == 1) {
    					couleur = "Coeur";
    				}
    				if (chiffeEntreUnetQuatre == 2) {
    					couleur = "Carreau";
    				}
    				if (chiffeEntreUnetQuatre == 3) {
    					couleur = "Pique";
    				}
    				if (chiffeEntreUnetQuatre == 4) {
    					couleur = "Trefle";
    				}
    				Carte carte = new Carte(hauteur, couleur);
     
    				if (!cartesGenerees.containsValue(carte)) {
    					cartesGenerees.put(i, carte);
    					tirerUneCarte = false;
    				} else {
    					System.out.println("\tCarte refusée (doublons) : " + carte);
    				}
     
    			}
     
    		}
     
    		System.out
    				.println("---------------------------------------------------");
    		System.out.println("Liste des cartes de la map ("
    				+ cartesGenerees.size() + " cartes) :");
    		Set<Integer> keys = cartesGenerees.keySet();
    		for (Integer key : keys) {
    			Carte c = cartesGenerees.get(key);
    			System.out.println(c);
    		}
     
    	}
     
    }
     
    class Carte {
     
    	public String hauteur;
    	public String couleur;
     
    	// constructeur de Carte
    	Carte(String hauteurCarte, String couleurCarte) {
    		hauteur = hauteurCarte;
    		couleur = couleurCarte;
    	}
     
    	public void setHauteur(String hauteur) {
    		this.hauteur = hauteur;
    	}
     
    	public void setCouleur(String couleur) {
    		this.couleur = couleur;
    	}
     
    	@Override
    	public boolean equals(Object obj) {
    		if (!(obj instanceof Carte))
    			return false;
    		Carte o = (Carte) obj;
    		if (o.hauteur.equals(hauteur) && o.couleur.equals(couleur)) {
    			return true;
    		}
    		return false;
    	}
     
    	@Override
    	public String toString() {
    		return "hauteur: " + hauteur + ", couleur: " + couleur;
    	}
     
    }

  10. #10
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Tu fais des put avec ta variable "i" comme clé, qui est incrémenté à chaque boucle. Sauf que, si ta carte est déjà dans ta map, tu n'ajoutes rien mais i est tout de même incrémenté. Tu te retrouves donc avec par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1 | 2 de pique
    2 | 10 de coeur
    4 | 3 de trèfle
    Or tu parcours ta map avec ta boucle "for (int j = 0; j < taille; j++)". Si tu arrives à "3", ta map va te retourner "null", d'où le nullpointer...

  11. #11
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Par défaut
    Merci visiwi pour ta réponse et le code proposé


    Et merci DevTeam_ !
    C'est exactement ça le problème! J'ai résolu ça hier en faisant un : si la carte est trouvée

    Du coup ça marche!
    Merci pour ton coup de main


    Par contre j'ai un autre souci : mon code ne génere que 51 cartes et pas 52...
    Et j'ai fais quelques modifs dans mon code (j'ai changé le i<51 en i<=51 dans mon for), sans aucun résultat... Je ne sais pas comment faire. Une idée ?

  12. #12
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i = 1; i <= 51; i++) {
    Tu devrais pas commencer à 0 pour faire 52?
    Sinon ça fait en effet que 21 cartes

  13. #13
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ou dire à i d'aller jusqu'à 52... ca parait logique.

  14. #14
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Par défaut
    Biensûr j'ai modifié ma boucle for qui va de 0 à 51, mais je n'ai toujours que 51 cartes

    EDIT: Peut-être un indice : au moment de générer ma 52ème carte, le programme mouline et eclipse (enfin non, un programme qui s'appelle "java") tourne à 90% d'utilisation du processeur...

    Savez-vous d'où ça peut venir ?

  15. #15
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ouais tu as une boucle infinie parce qu'il n'arrive pas à générer la carte restante.

    Au passage je trouve bizarre de générer aléatoirement une carte et ensuite vérifier si elle n'a pas déjà été tirée. Il serait 1000x plus efficace de préparer la liste de 52 cartes puis d'en enlever une aléatoirement (temps d'exécution déterminé tandis que ton programme va boucler jusqu'à ce que le hasard arrive à trouver une carte non tirée... ce qui peut durer longtemps... voire très longtemps...).

  16. #16
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Par défaut
    Oui, c'est une bonne idée. Comment coder un tel système? Je rempli un tableau avec toutes les cartes. Et je supprime chaque carte que j'utilise ? (et je la stocke dans un autre tableau)

  17. #17
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Tu crée un ArrayList tu la remplis avec toute tes cartes, ensuite tu tire un chiffre aléatoire entre 0 et la taille de ton ArrayList-1. Ensuite tu fais un remove de l'élément de cet indice.

Discussions similaires

  1. Erreur de débutant, java.lang.NullPointerException
    Par Ardillon dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 08/07/2013, 14h42
  2. Réponses: 3
    Dernier message: 21/11/2011, 19h37
  3. Erreur "save failed: java.lang.NullPointerException"
    Par faffany dans le forum Struts 2
    Réponses: 8
    Dernier message: 15/09/2011, 11h42
  4. erreurs de type java.lang.NullPointerException
    Par laposte dans le forum Servlets/JSP
    Réponses: 17
    Dernier message: 06/04/2009, 19h45
  5. Réponses: 32
    Dernier message: 20/04/2007, 21h56

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