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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 23 nov. 2013 à 18:10
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 23 nov. 2013 à 18:10
A voir également:
- Nullpointerexception processing
- A java exception has occurred ✓ - Forum Minecraft
- Null messenger - Forum Mail
- Null brawl ios - Forum iPhone
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
22 nov. 2013 à 18:44
22 nov. 2013 à 18:44
Tu l'as initialisé ton tableau avant de mettre des valeurs dans des cases qui n'existent pas ?
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
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)
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)
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
23 nov. 2013 à 12:49
23 nov. 2013 à 12:49
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];
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
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 ?
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.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
23 nov. 2013 à 18:10
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 :
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++)