Thread "main" java.lang.NullPointerExcep

Résolu/Fermé
lunebleue02 - 17 nov. 2009 à 18:19
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 - 18 nov. 2009 à 11:07
Bonjour a tous,

je suis en train de programmer un jeu puissance 4 basique pour 2 joueurs à afficher dans un terminal. J'ai donc creer plusieurs classes : Pion, Joueur, Grille et Partie, que j'ai testé dans des mains et qui fonctionnent toutes très bien. Malheureusement ma classe LancementJeu qui est mon main final ne fonctionne pas, au début tout va bien, elle me demande le nom des joueurs, le nombre de lignes et de colonnes souhaitées, ce qui est parfaitement normal et puis après je sais pas pourquoi elle m'envoie :

Exception in thread "main" java.lang.NullPointerException
at puissance4.Partie.getColonnes(Partie.java:51)
at puissance4.LancementJeu.tourJoueur1(LancementJeu.java:62)
at puissance4.LancementJeu.lancement(LancementJeu.java:47)
at puissance4.LancementJeu.<init>(LancementJeu.java:11)
at puissance4.LancementJeu.main(LancementJeu.java:136)

Je sais qu'un pointeur ne peut pas pointer sur rien, mais là, je ne vois vraiment pas pourquoi il me dit çà...
Si quelqu'un pourrait m'aider ce serait vraiment sympa parce que franchement je désespère.

Voici ma classe LancementJeu, sans elle je doute que vous puissiez m'aider :

package puissance4;
import outils.*;
public class LancementJeu {

private int j;
private Partie p;
private Console co = new Console();

public LancementJeu(){
this.p = new Partie();
this.lancement();
}

// Lancement d'une partie

public void lancement(){
boolean partieEnCours = true;
co.println("Jeu puissance 4");

// Mise en place de la partie

co.println("Nom du joueur 1 (couleur rose):");
String nom1 = co.readLine();
co.println("Nom du joueur 2 (couleur bleu):");
String nom2 = co.readLine();
co.println("Nombre de lignes desirees :");
int nb_lignes = co.readInt();
co.println("Nombre de colonnes desirees :");
int nb_colonnes = co.readInt();
Partie p = new Partie();
co.println("\n");
p.setJoueur1(nom1);
p.setJoueur2(nom2);
p.setGrille(nb_lignes,nb_colonnes);
co.println(p.toString());
j = 1;

// La partie

while (partieEnCours){

switch (j){
case 0:
partieEnCours = false;
break;
case 1:
tourJoueur1();
break;
case 2:
tourJoueur2();
break;
case 3:
finPartie();
break;
}
}
}

// Fonctions privees

private void tourJoueur1(){
String jouer = "Ou veux-tu jouer (numero de colonne de 0 a "+p.getColonnes()+")";
co.println(p.getNomJoueur1()+" a toi de jouer");
co.println(jouer);
int no = co.readInt();
if (! p.numColonneValide(no)){
co.println("Numero de colonne non valide");
co.println("Veuillez choisir un autre numero");
no = co.readInt();
}
else {
Pion p1 = new Pion("rose");
p.ajouterPion(no,p1);
int l = p.numLignePionEnHaut(no);
if (p.aligner(l,no)){
co.println(p.getNomJoueur1()+" gagnant !");
j = 3;
}
else {
if (p.grilleRemplie()){
co.println("Grille pleine, partie terminee");
j = 3;
}
else {
co.println(p.toString());
j = 2;
}
}
}
}

private void tourJoueur2(){
String jouer = "Ou veux-tu jouer (numero de colonne de 0 a "+p.getColonnes()+")";
co.println(p.getNomJoueur2()+" a toi de jouer");
co.println(jouer);
int no = co.readInt();
if (! p.numColonneValide(no)){
co.println("Numero de colonne non valide");
co.println("Veuillez choisir un autre numero");
no = co.readInt();
}
else {
Pion p2 = new Pion("bleu");
p.ajouterPion(no,p2);
int l = p.numLignePionEnHaut(no);
if (p.aligner(l,no)){
co.println(p.getNomJoueur2()+" gagnant !");
j = 3;
}
else {
if (p.grilleRemplie()){
co.println("Grille pleine, partie terminee");
j = 3;
}
else {
co.println(p.toString());
j = 1;
}
}
}
}

private void finPartie(){
co.println("Voulez-vous rejouer ? (oui/non)");
String rep = co.readLine();
if (rep.equals("oui")){
this.lancement();
}
if (rep.equals("non")){
j = 0;
}
co.println("Repondre oui ou non");
}

public static void main(String [] a) {
new LancementJeu();
}
}
A voir également:

3 réponses

sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
17 nov. 2009 à 18:32
1. Supprime
this.p = new Partie();
dans le constructeur car inutile.
2. Modifie
Partie p = new Partie();
dans la métode lancement() en supprimant la déclaration (il faut utiliser la variable de classe et non une nouvelle variable). Tu auras donc à la place
p = new Partie();


En passant: déclarer un "j" comme variable de classe n'est pas génial (la première chose qui saute aux yeux). Et ton Firefox n'est pas à jour non plus =)

++
0
lunebleue02
18 nov. 2009 à 11:04
Merci beaucoup tout fonctionne parfaitement !

Je suis très impressionnée par votre vitesse de réponse.

Encore un grand merci.

++
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
18 nov. 2009 à 11:07
De rien ! :-)
0