Java.lang.NullPointerException
sotec
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
voila je fais actuellement un programme de taquin en java (puzzle de 9 cases avec une manquante et une image à recomposer) .
Je le créé en modele vue controlleur, et mon modele me renvoi un java.lang.NullPointerException, que je ne trouve pas ><.
l'erreur complete est :
Exception in thread "main" java.lang.NullPointerException
at ITaquin.ITaquin.<init>(ITaquin.java:57)
at Main.main(Main.java:17)
Java Result: 1
la classe Square utilisé est fonctionnelle.
Le main :
import ITaquin.*;
/**
*
* @author guillaume
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ITaquin taquin = new ITaquin();
}
}
la classe modele :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ITaquin;
/**
*
* @author guillaume
*/
import java.util.*;
public final class ITaquin extends Observable
{
private int piece=0;
static final int DIM=3;
public Square[][] damier = new Square[DIM][DIM];
{
setChanged();
notifyObservers();
}
@Override public String toString()
{
final String LS = System.getProperty("line.separator");
final String TAB = "\t";
String s = TAB;
for(int i=0;i<DIM;i++)
{
for(int j=0;j<DIM;j++ )
{
s =s + damier[i][j].getNumImage() + (i<DIM-1 ? TAB : LS+TAB);
}
}
return s;
}
public ITaquin()
{
int x = 0;
for(int i=0;i<DIM;i++)
{
for(int j=0;j<DIM;j++ )
{
x++;
damier[i][j].setNum(x); // ligne 57 ou netbean désigne l'erreur
damier[i][j].setNumImage(x);
}
}
melanger();
}
public void melanger()
{
int max = getNumAleatoire();
for(int i=0;i<max;i++)
{
for(int j=0;j<max;j++ )
{
damier[i%DIM][j%DIM].echangerCaseVide(i%DIM,j%DIM);
}
}
}
public int getNumAleatoire()
{
int indice=(int)(Math.random()*(DIM*DIM))+1;
if(existe(indice)==true || indice==0)
{
while(existe(indice)==true)
{indice=(int)(Math.random()*DIM*DIM)+1;}
}
piece=piece*10+indice;
return piece;
}
public void echanger(int i,int j)
{
damier[i][j].echangerCaseVide(i,j);
}
public void reset()
{
for(int i=0;i<DIM;i++)
{
for(int j=0;j<DIM;j++ )
{
damier[i][j].reset();
}
}
}
public boolean existe(int indice)
{ boolean b=false;
int inter = piece;
while(inter>0)
{
if(inter%10==indice){b=true;}
inter=inter/10;
}
return b;
}
public boolean verifierVictoire()
{
if(damier[0][0].getNumImage()==1 &&
damier[0][1].getNumImage()==2 &&
damier[0][2].getNumImage()==3 &&
damier[1][0].getNumImage()==4 &&
damier[1][1].getNumImage()==5 &&
damier[1][2].getNumImage()==6 &&
damier[2][0].getNumImage()==7 &&
damier[2][1].getNumImage()==8 &&
damier[2][2].getNumImage()==9 )
{
return true;
}
else
return false;
}
}
Je vous remercie de votre temps perdu à regarder mon code ><
et merci d'avance pour vos reponses.
voila je fais actuellement un programme de taquin en java (puzzle de 9 cases avec une manquante et une image à recomposer) .
Je le créé en modele vue controlleur, et mon modele me renvoi un java.lang.NullPointerException, que je ne trouve pas ><.
l'erreur complete est :
Exception in thread "main" java.lang.NullPointerException
at ITaquin.ITaquin.<init>(ITaquin.java:57)
at Main.main(Main.java:17)
Java Result: 1
la classe Square utilisé est fonctionnelle.
Le main :
import ITaquin.*;
/**
*
* @author guillaume
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ITaquin taquin = new ITaquin();
}
}
la classe modele :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ITaquin;
/**
*
* @author guillaume
*/
import java.util.*;
public final class ITaquin extends Observable
{
private int piece=0;
static final int DIM=3;
public Square[][] damier = new Square[DIM][DIM];
{
setChanged();
notifyObservers();
}
@Override public String toString()
{
final String LS = System.getProperty("line.separator");
final String TAB = "\t";
String s = TAB;
for(int i=0;i<DIM;i++)
{
for(int j=0;j<DIM;j++ )
{
s =s + damier[i][j].getNumImage() + (i<DIM-1 ? TAB : LS+TAB);
}
}
return s;
}
public ITaquin()
{
int x = 0;
for(int i=0;i<DIM;i++)
{
for(int j=0;j<DIM;j++ )
{
x++;
damier[i][j].setNum(x); // ligne 57 ou netbean désigne l'erreur
damier[i][j].setNumImage(x);
}
}
melanger();
}
public void melanger()
{
int max = getNumAleatoire();
for(int i=0;i<max;i++)
{
for(int j=0;j<max;j++ )
{
damier[i%DIM][j%DIM].echangerCaseVide(i%DIM,j%DIM);
}
}
}
public int getNumAleatoire()
{
int indice=(int)(Math.random()*(DIM*DIM))+1;
if(existe(indice)==true || indice==0)
{
while(existe(indice)==true)
{indice=(int)(Math.random()*DIM*DIM)+1;}
}
piece=piece*10+indice;
return piece;
}
public void echanger(int i,int j)
{
damier[i][j].echangerCaseVide(i,j);
}
public void reset()
{
for(int i=0;i<DIM;i++)
{
for(int j=0;j<DIM;j++ )
{
damier[i][j].reset();
}
}
}
public boolean existe(int indice)
{ boolean b=false;
int inter = piece;
while(inter>0)
{
if(inter%10==indice){b=true;}
inter=inter/10;
}
return b;
}
public boolean verifierVictoire()
{
if(damier[0][0].getNumImage()==1 &&
damier[0][1].getNumImage()==2 &&
damier[0][2].getNumImage()==3 &&
damier[1][0].getNumImage()==4 &&
damier[1][1].getNumImage()==5 &&
damier[1][2].getNumImage()==6 &&
damier[2][0].getNumImage()==7 &&
damier[2][1].getNumImage()==8 &&
damier[2][2].getNumImage()==9 )
{
return true;
}
else
return false;
}
}
Je vous remercie de votre temps perdu à regarder mon code ><
et merci d'avance pour vos reponses.
1 réponse
Évite d'utiliser autant que possible du code statique comme tu l'as fait ici :
Le mieux est de faire l'initialisation proprement dans le constructeur :
public Square[][] damier = new Square[DIM][DIM];
{
setChanged();
notifyObservers();
}
Le mieux est de faire l'initialisation proprement dans le constructeur :
public ITaquin()
{
damier = new Square[DIM][DIM];
setChanged();
notifyObservers();
int x = 0;
for(int i=0; i<DIM; i++)
for(int j=0; j<DIM; j++)
{
x++;
damier[i][j] = new Square(...); // étape qu'il manque à ton code
damier[i][j].setNum(x); // ligne 57 ou netbean désigne l'erreur
damier[i][j].setNumImage(x);
}
}