Problème Null pointer exception
Eminar
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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();
}
}
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();
}
}
A voir également:
- Null pointer exception processing
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : - Guide
- Processing download - Télécharger - Langages
- A java exception has occurred - Forum Minecraft
- Une exception non gérée s'est produite dans votre application - Forum Word
2 réponses
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)
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)
Il faut donner des valeurs aux objets que tu manipules, si tu fais :
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; 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];
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 ?
Car ça ne fonctionne pas et je comprends pas pourquoi ?
Ca me permettrait d'aller plus vite que de les initialiser une par une.
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.
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 :
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++)