Problème Null pointer exception

Fermé
Eminar Messages postés 26 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 17 avril 2015 - 22 nov. 2013 à 17:29
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 23 nov. 2013 à 18:10
Bonjour, je débute en java et surtout avec les classes. J'ai un problème de Null pointer exception. Pouvez vous me dire d'où vient-elle ? Sachant que la classe CaseMur implémente la classe Icase. colonnes est quant à lui initialisé dans le main.

Merci d'avance !

class Plateau {
Icase plateau [][] ;

void tableau() {

for(int i=0; i<colonnes + 2; i++){
this.plateau [ i ] [1]=new CaseMur();
this.plateau [i ][colonnes+2]=new CaseMur();
}
}

2 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
22 nov. 2013 à 18:44
Tu l'as initialisé ton tableau avant de mettre des valeurs dans des cases qui n'existent pas ?
0
Eminar Messages postés 26 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 17 avril 2015
Modifié par Eminar le 22/11/2013 à 23:37
Je pensais que lorque j'écrivais Icase plateau [][], ça initialisait automatiquement.
il faut donc que je fasse une boucle for, et je met quelle valeur dans chaque case ?
En fait quand tu dis initialiser, tu veux dire mettre une valeur dans chaque case ?

(désolé si les questions peuvent paraître bêtes)
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
23 nov. 2013 à 12:49
Il faut donner des valeurs aux objets que tu manipules, si tu fais :

int n;
String s;
Icase[][] plateau;

Tu n'as pas précisé de valeurs aux différentes références, par défaut elles vaudront 0 pour l'entier et null pour les objets. Si tu les manipules tu obtiendras un NullPointerException.

Ce qu'il faut faire c'est donner des valeurs aux objets, et en particulier pour les tableaux, leur donner une taille !

int n = 42;
String s = "Bonjour";
Icase[][] plateau = new Icase[10][10];
0
Eminar Messages postés 26 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 17 avril 2015
23 nov. 2013 à 15:35
Merci beaucoup ! Ça marche !
Une autre petite question, qui vous paraîtra sans doute évidente. Si je veux que toutes les cases de mon tableau qui ne sont pas des CaseMur deviennent des CaseVide, je peux le faire comme ça ?
   for (int i=0; i<plateau.length; i++){
     for (int j=0; i<plateau.length; i++){
       if ( plateau[i][j] instanceof CaseMur){
       }else{
         plateau [i][j] = new CaseVide();
       }
     }
   }   
 


Car ça ne fonctionne pas et je comprends pas pourquoi ?
Ca me permettrait d'aller plus vite que de les initialiser une par une.
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
23 nov. 2013 à 18:10
Si ton tableau est déclaré par l'interface ICase et que tu as CaseMur implements ICase et CaseVide implements ICase alors l'affectation devrait fonctionner.

Cependant ton imbrication de boucle for est fausse, il faudrait plutôt écrire :
for (int i=0; i<plateau.length; i++)
     for (int j=0; j<plateau[i].length; j++)
0