Thread "main" java.lang.NullPointerExcep
Résolu
lunebleue02
-
sandul Messages postés 3927 Date d'inscription Statut Membre Dernière intervention -
sandul Messages postés 3927 Date d'inscription Statut Membre Dernière intervention -
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();
}
}
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:
- Thread "main" java.lang.NullPointerExcep
- La main de la titi popo - Forum Musique / Radio / Clip
- Scan ligne de la main gratuit - Télécharger - Photo & Graphisme
- Main menu xiaomi - Forum Xiaomi
- Désactiver remise en main propre leboncoin - Forum Consommation & Internet
- Prise en main a distance windows - Guide
3 réponses
1. Supprime
2. Modifie
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 =)
++
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 =)
++