Tableau de structures en Java

Fermé
levanpolka - 25 mars 2011 à 19:59
 levanpolka - 1 avril 2011 à 22:20
Bonjour,

Voila je suis débutante en programmation et je n'arrive pas à comprendre d'où vient l'erreur. Le but est de créer un jeu de carte dans un tableau de 32 cases.
Chaque case contient une structure Cartes définit par :

class Cartes{
       int numero;
       String numero;
}


Mon tableau est vide et je veux générer mes cartes. J'ai donc :

public static void genererPaquetDebut(Cartes[] paquetDebut){
		int ind;
		int indiceCOE=0;
		int indiceCAR=8;
		int indicePIQ=16;
		int indiceTRE=24;
		int numcarte=7;
		
		
		do{
			paquetDebut[indiceCOE].numero=numcarte;
			paquetDebut[indiceCAR].numero=numcarte;
			paquetDebut[indicePIQ].numero=numcarte;
			paquetDebut[indiceTRE].numero=numcarte;
			paquetDebut[indiceCOE].couleur="<3";
			paquetDebut[indiceCAR].couleur="<>";
			paquetDebut[indicePIQ].couleur="^";
			paquetDebut[indiceTRE].couleur="o°o";
				numcarte+=1;
				indiceCOE+=1;
				indiceCAR+=1;
				indicePIQ+=1;
				indiceTRE+=1;
			}while (indiceTRE<=31);
}

Avec dans le main :

public static void main (String[]args){
		
		Cartes[] paquetDebut = new Cartes[32];
		
			genererPaquetDebut(paquetDebut);

       }


L'erreur indiquée est :
Exception in thread "main" java.lang.NullPointerException
at carte.genererPaquetDebut(carte.java:57)
at carte.main(carte.java:8)



Qu'est-ce que ça veut dire?
Comment corriger l'erreur?


Merci d'avance =)






















A voir également:

6 réponses

Utilisateur anonyme
25 mars 2011 à 21:07
Salut,


Exception in thread "main" java.lang.NullPointerException
at carte.genererPaquetDebut(carte.java:57)

Signifie que tu as un indice "null" et que le probème se situe ligne 57 du programme.

Il est indiqué que c'est dans la classe carte.
Or le code que tu nous donne est celui de la classe Cartes.

Qu'as-tu exécuté ?

Cordialement,

Dan
0
Bonjour,
Merci pour cette réponse rapide.
"carte" et le nom de mon programme. Il contient des autres fonction comme afficher les règles du jeu, saisir le prénom du joueur etc.
Je me suis demandé si c'était un problème d'importation du paramètre paquetDebut?

En gros j'ai :

mon main qui appelle la fonction menu ()
action menu qui appelle l'action nouvellePartie ()
nouvellePartie qui déclare Cartes[] paquetDebut = new Cartes et qui appelle la fonction genererPaquetDebut(paquetDebut)
0
Utilisateur anonyme
26 mars 2011 à 17:15
Re,

Ok c'est donc la ligne 57 de la classe "carte" (qu'il aurait été mieux de nommer Carte pour respecter les conventions de "nommage"...) qui provoque cette levée d'exception,

Quelle est donc cette ligne ? (avec la partie du code dans laquelle elle se trouve).
Merci

Dan
0
Bonjour,
D'accord pour les conventions de nommage, je le saurai maintenant!
Je vous mets mon bout de code simplifié (j'ai enlevé les parties qui ne posaient pas problème pour plus de lisibilité).
Le but de mon action genererPaquetDebut est de créer un tableau de 32 cases où chaque cases contient une carte définit par la structure Cartes. Et le paquet doit être classé dans un ordre définit. Ici on aura 7 coeur, 8 coeur .. 7 carreau, 8 carreau etc.

public class Whist{
	
		public static void main (String[]args){
		Cartes[] paquetDebut = new Cartes[32];
			genererPaquetDebut(paquetDebut);
			nouvellePartie(paquetDebut);
		}
			
		public static void nouvellePartie(Cartes[] paquetDebut){
					affichagePaquetDebut(paquetDebut);
		}
		
		
		public static void genererPaquetDebut(Cartes[] paquetDebut){
				int ind=0;
				int indiceCOE=0;
				int indiceCAR=8;
				int indicePIQ=16;
				int indiceTRE=24;
				int numcarte=7;
			
				do{
					
					paquetDebut[indiceCOE].numero=numcarte;
					paquetDebut[indiceCAR].numero=numcarte;
					paquetDebut[indicePIQ].numero=numcarte;
					paquetDebut[indiceTRE].numero=numcarte;
					paquetDebut[indiceCOE].couleur="<3";
					paquetDebut[indiceCAR].couleur="<>";
					paquetDebut[indicePIQ].couleur="^";
					paquetDebut[indiceTRE].couleur="o°o";
						numcarte+=1;
						indiceCOE+=1;
						indiceCAR+=1;
						indicePIQ+=1;
						indiceTRE+=1;
					}while (indiceTRE<=31);
				}
				
		
		public static void affichagePaquetDebut(Cartes[] paquetDebut){
			int ind=0;
				for (ind=0;ind<32;ind+=1){
					switch (paquetDebut[ind].numero){
						case 11 : 
							System.out.print("[Val "+paquetDebut[ind].couleur+"]");
						break;
						case 12 : 
							System.out.print("[Dam "+paquetDebut[ind].couleur+"]");
						break;
						case 13 : 
							System.out.print("[Roi "+paquetDebut[ind].couleur+"]");
						break;
						case 14 : 
							System.out.print("[As "+paquetDebut[ind].couleur+"]");
						break;
						
						default :
					System.out.print("["+paquetDebut[ind].numero+" "+paquetDebut[ind].couleur+"]");
					}
					
				}
		}	
}
	
	
class Cartes{
	int numero;
	String couleur;
}
	



Je pense que le problème vient de la syntaxe paquetDebut[indiceCOE].numero.
Je pense qu'il faudrait créer une structure vide genre Cartes carteIci = new Cartes(), puis l'appelé en écrivant carteIci.numero ou carteIci.couleur mais je ne sais pas comment faire le lien avec les indices de mon tableau.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
27 mars 2011 à 18:30
Re,

La classe Whist est la classe utilisateur.
La classe Cartes est la classe qui génère le paquet de cartes.

On suppose qu'il faut (pour simplifier) enregistrer toutes les cartes dans le paquet.

Comment depuis la classe Whist demander à la classe Cartes de créer le paquet et de retourner le résultat ?

La classe utilisateur:

public class Whist
   {
/* Création du paquetDebut (vide) d'une taille de 52 cartes */
      private static String[] paquetDebut = new String[52];
   
      public static void main (String[]args)
      {
         Cartes crt = new Cartes(); // création de l'objet crt de la classe Cartes

         paquetDebut = crt.genererPaquetDebut(paquetDebut);

 /*
  *
  * paquetDebut = signifie qu'on veut récupérer le paquet créé.
  *
  * crt.genererPaquetDebut(paquetDebut), indique que c'est la méthode
  * genererPaquetDebut de la classe Cartes (objet crt) à laquelle
  * on passe paquetDebut (vide) en paramètre qui doit genérer.
  *
  */ 
       
         affichagePaquetDebut(); // contrôle du résultat
         //nouvellePartie(paquetDebut);
      }
      
      public static void affichagePaquetDebut()
      {
         int ind=0;
         for
         (ind=0;ind<52;ind+=1)
         {
            System.out.println(paquetDebut[ind]);
         }
      }
   }


La classe Cartes:

class Cartes
   {
   
      public String[] genererPaquetDebut(String[] paquetDebut)
      {
         int ind;
         int indiceCOE=0;
         int indiceCAR=13;
         int indicePIQ=26;
         int indiceTRE=39;
         //int numcarte=0;
         System.out.println("Taille du paquetDebut = " + paquetDebut.length);
      
         for(int i = 0; i <52; i++)
         {
            paquetDebut[indiceCOE] = "Num. carte de coeur = " + (i + 1);
            paquetDebut[indiceCAR] = "Num. carte de carreau = " + (i + 1);
            paquetDebut[indicePIQ] = "Num. carte de pique = " + (i + 1);
            paquetDebut[indiceTRE] = "Num. carte de trèfle = " + (i + 1);
// les numéros de cartes 11, 12 et 13 correspondent au valet, dame et roi de chaque couleur...
            
            /*paquetDebut[indiceCOE] = "<3";
            paquetDebut[indiceCAR] = "<>";
            paquetDebut[indicePIQ] = "^";
            paquetDebut[indiceTRE] = "o°o";
            numcarte++ */
            
            indiceCOE++;
            indiceCAR++;
            indicePIQ++;
            indiceTRE++;
            if(indiceTRE >51)
               break;
         }
         return paquetDebut;
      }
   }



Cordialement,

Dan
0
Bonsoir,

Désolé de répondre si tard. Je vous remercie, car j'ai compris maintenant! =)
Merci encore d'avoir pris le temps d'apporter de claires explications.

Bonne soirée
0