N00b : je n'arrive pas à remplir mon tableau :/

N00b : je n'arrive pas à remplir mon tableau :/ - Java - Programmation

Marsh Posté le 16-02-2004 à 13:08:26    

Voilà, je dois faire un projet en java pour la fin d'année, et je n'ai aucune idee de quoi faire. Comme nous partons d'un niveau en java proche de zero, je cherche a m'entrainer un peu, et j'essaie de faire un petit jeu de bataille navale.
En premier j'essaie d'écrire une classe gerant les grilles.
 
pour cela, j'essaie de generer un tableau, de le remplir au depart de 0 si il n'y a pas de bateau, puis j'essaie d'affficher le contenu des cases.  
ca compile, mais à l'exécution, j'ai un  
 

mathieu@perchut2 projet $ java Grille
Exception in thread "main" java.lang.NullPointerException
        at Grille.main(Grille.java:57)


 
ce qui correspond à la ligne ou je remplis mon tableau de 0. Si j'ai bien suivi, ca veut dire que mon tableau est rempli de Null c'est ca ? Or je le sais bien, vu que je veux le remplir de 0 :/
 
Si vous pouviez m'aider  [:joce] ... merci :)
(ok, c'est un peu gruik comme programme :p)
 

Code :
  1. public class Grille {
  2. static int hauteur;
  3. static int largeur;
  4. static int mer[][] ;
  5. // constructeur
  6. Grille (int largeur, int hauteur) {
  7. this.hauteur = hauteur ;
  8. this.largeur = largeur ;
  9. int[][] mer = new int[largeur][hauteur];
  10. }
  11. // méthode pour afficher la grille
  12. public static void affiche () {
  13. for(int i = 0; i <= largeur-1; i++) {
  14. try {
  15.         for(int j = 0; j <= hauteur-1; j++) {
  16.   try {
  17.           System.out.println("mer[" + i + "][" + j +
  18.           "] = " + mer[i][j]);
  19.   }
  20.   catch (NullPointerException e) {
  21.    System.out.println(e + ", bien intercepte!" );
  22.   }
  23.  }
  24. }
  25. catch (NullPointerException e) {
  26.  System.out.println(e + ", bien intercepte!" );
  27. }
  28. }
  29. }
  30. // méthode main
  31. public static void main (String args[]) {
  32. Grille premieregrille = new Grille(5,6) ;
  33.   // on initialise à vide toute la grille
  34. for(int i = 0; i <= premieregrille.largeur-1; i++)
  35.     for(int j = 0; j <= premieregrille.hauteur-1; j++)
  36.          premieregrille.mer[i][j]=0;
  37. premieregrille.affiche();
  38. }
  39. }

Reply

Marsh Posté le 16-02-2004 à 13:08:26   

Reply

Marsh Posté le 16-02-2004 à 13:24:00    

[:serial coder] [:totoz] [:urd-sama]
 
 
outre les très nombreuses aberrations qu'il y a dans ton code, l'erreur vient du fait que dans le constructeur, ce n'est pas l'attribut de classe mer que tu initialises, mais une variable locale au constructeur. Faut que tu vires le "int[][]"


Message édité par benou le 16-02-2004 à 13:24:54

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 16-02-2004 à 13:24:45    

Tout en static, putain :sweat:


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 16-02-2004 à 13:25:45    

Ca veut pas dire que ton tableau est rempli de null, ca veut dire que tu n'as pas alloué de mémoire pour ton tableau.
1) il n'y a aucune raison pour que mer hauteur et largeur soient static.
2) une fois que mer ne sera plus static tu n'auras plus besoin de la redéclarer dans ton constructeur et donc tu pourra l'instancier correctement.


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 16-02-2004 à 13:25:46    

[:daplopbot] le vieux barbare....
 

Citation :


(ok, c'est un peu gruik comme programme :p)  


 
un peu en effet...


Message édité par uriel le 16-02-2004 à 13:26:32

---------------
IVG en france
Reply

Marsh Posté le 16-02-2004 à 13:26:15    

Pierre Tramo :love:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 16-02-2004 à 13:26:16    


 
 [:sisicaivrai]  
j'ai trois TP de java comme expérience, hein :p
 

benou a écrit :


outre les très nombreuses aberrations qu'il y a dans ton code, l'erreur vient du fait que dans le constructeur, ce n'est pas l'attribut de classe mer que tu initialises, mais une variable locale au constructeur. Faut que tu vires le "int[][]"


 
merci, je regarde ca :)

Reply

Marsh Posté le 16-02-2004 à 13:28:55    

quand tu utilises des tableaux comme ca fait toi un compteur qui te donne à chaque instant le nombre d'entité que contient le tableau (sachant que ca commence à numéroter à 0)
 
Parce que si tu pointes sur une case vide du tableau pour la lire, tu va manger une nullpointerexception...
 
PS : avant de le lire, faudrait le remplir ton tableau, ca aiderait ;)


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 16-02-2004 à 13:32:13    

Jubijub a écrit :

quand tu utilises des tableaux comme ca fait toi un compteur qui te donne à chaque instant le nombre d'entité que contient le tableau (sachant que ca commence à numéroter à 0)
 
Parce que si tu pointes sur une case vide du tableau pour la lire, tu va manger une nullpointerexception...
 
PS : avant de le lire, faudrait le remplir ton tableau, ca aiderait ;)

en l'occurence, en java les tableaux sont des objets et ils connaissent leur taille : nomDuTableau.length ;)


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 16-02-2004 à 13:44:59    

Bon ca yest, ca marche, et je n'ai plus rien en static :p
 
merci :D

Reply

Marsh Posté le 16-02-2004 à 13:44:59   

Reply

Marsh Posté le 16-02-2004 à 13:51:29    

tant qu'à faire, évite de "catcher" les run-time exceptions, genre NullPointerException, qui correspondent plutôt à des erreurs de programmation.  
 
et en plus ton code sera plus lisible  ;)


Message édité par LAs3R le 16-02-2004 à 13:52:05
Reply

Marsh Posté le 16-02-2004 à 13:53:25    

LAs3R a écrit :

tant qu'à faire, évite de "catcher" les run-time exceptions, genre NullPointerException, qui correspondent plutôt à des erreurs de programmation.  
 
et en plus ton code sera plus lisible  ;)


 
oui, j'ai vu que ca servait a rien ici, j'ai tout viré :)
 

Code :
  1. public class Grille {
  2. int hauteur;
  3. int largeur;
  4. int[][] mer ;
  5. // constructeur
  6. Grille (int largeur, int hauteur) {
  7. this.hauteur = hauteur ;
  8. this.largeur = largeur ;
  9. mer = new int[largeur][hauteur];
  10. }
  11. // méthode pour afficher la grille
  12. public void affiche () {
  13. for(int i = 0; i <= largeur-1; i++) {
  14.         for(int j = 0; j <= hauteur-1; j++) {
  15.          System.out.println("mer[" + i + "][" + j +
  16.          "] = " + mer[i][j]);
  17.  }
  18. }
  19. }
  20. // méthode main
  21. public static void main (String args[]) {
  22. Grille premieregrille = new Grille(5,6) ;
  23.   // on initialise à vide toute la grille
  24. System.out.println(""+premieregrille.mer.length);
  25. for(int i = 0; i <= premieregrille.largeur-1; i++)
  26.     for(int j = 0; j <= premieregrille.hauteur-1; j++)
  27.          premieregrille.mer[i][j]=0;
  28. premieregrille.affiche();

Reply

Marsh Posté le 16-02-2004 à 13:59:49    

R3g a écrit :

en l'occurence, en java les tableaux sont des objets et ils connaissent leur taille : nomDuTableau.length ;)

.
 
bien sur qu'ils connaissent leur taille, mais si t'a un tableau de lengh 10 et que t'a que 5 éléments dedans, si tu parse tant que i<9 tu va voir des soucis...dès que i = 5, bam, nullpointerexception...
 
alors que si qq part tu as stocké que tu n'a que 5 éméments dans le tableau, tu parses tant que i<tailleTableau, et tu t'arrete à temps


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 16-02-2004 à 14:24:41    

Jubijub a écrit :

.
 
bien sur qu'ils connaissent leur taille, mais si t'a un tableau de lengh 10 et que t'a que 5 éléments dedans, si tu parse tant que i<9 tu va voir des soucis...dès que i = 5, bam, nullpointerexception...
 
alors que si qq part tu as stocké que tu n'a que 5 éméments dans le tableau, tu parses tant que i<tailleTableau, et tu t'arrete à temps

heu oui, pourquoi pas. T'as aussi le droit de tester si une ref est pas nulle avant d'appeler une méthode dessus. De toute façon là il a un tableau d'int donc pas de problème...


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 16-02-2004 à 15:20:38    

R3g a écrit :

De toute façon là il a un tableau d'int donc pas de problème...


qui en plus est initialisé à largeur et hauteur ...
 
j'aime bien aussi le "i <= largeur - 1" :)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 16-02-2004 à 15:25:07    

benou a écrit :


qui en plus est initialisé à largeur et hauteur ...
 
j'aime bien aussi le "i <= largeur - 1" :)


 
bon, c'est quoi le probleme ici :??: :o

Reply

Marsh Posté le 16-02-2004 à 15:35:55    

Normalement, pour ajouter 1 ou soustraire 1, tu utilise plutot ++ et --. Ici cela te donnerais "i<=largeur--".
Bon c'est du chipotage, il a dit 3 tp de Java et je te rassure, j'aurais même pas été capable de faire ce que t'a fait :)
Dur dur d'être un newbie ^^

Reply

Marsh Posté le 16-02-2004 à 15:37:18    

yep :)

Reply

Marsh Posté le 16-02-2004 à 15:37:35    

burnedsoul a écrit :


Dur dur d'être un newbie ^^


visiblement t'as pas fini d'en être :
 

burnedsoul a écrit :

Normalement, pour ajouter 1 ou soustraire 1, tu utilise plutot ++ et --. Ici cela te donnerais "i<=largeur--".


ces deux choses n'ont rien a voir, il a pas besoin de décrémenter largeur  :heink:

Reply

Marsh Posté le 16-02-2004 à 15:37:51    

Mais t'inquiète, un jour on les dépasseras lol

Reply

Marsh Posté le 16-02-2004 à 15:42:16    

burnedsoul a écrit :

Normalement, pour ajouter 1 ou soustraire 1, tu utilise plutot ++ et --. Ici cela te donnerais "i<=largeur--".
Bon c'est du chipotage, il a dit 3 tp de Java et je te rassure, j'aurais même pas été capable de faire ce que t'a fait :)
Dur dur d'être un newbie ^^


 :heink:  
rien à voir ...
 
c'est juste que i < largeur c'est quand même plus simple à écrire


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 16-02-2004 à 15:43:44    

Ah bah dsl alors :(
C'était quoi alors qui allait pas du coup ?

Reply

Marsh Posté le 16-02-2004 à 15:44:18    

Et on peut pas faire a la place de largeur -1 largeur-- ?

Reply

Marsh Posté le 16-02-2004 à 15:44:37    

burnedsoul a écrit :

Ah bah dsl alors :(
C'était quoi alors qui allait pas du coup ?


y'a pas d'erreur dans cette ligne, juste une soustraction inutile, cf poste de benou juste avant moi

Reply

Marsh Posté le 16-02-2004 à 15:44:44    

burnedsoul a écrit :

Et on peut pas faire a la place de largeur -1 largeur-- ?


lis le post de benou juste au dessus :o


---------------
IVG en france
Reply

Marsh Posté le 16-02-2004 à 15:46:47    

burnedsoul a écrit :

Et on peut pas faire a la place de largeur -1 largeur-- ?


non.
 

Code :
  1. largeur--;


 est traduit par  

Code :
  1. largeur = largeur - 1


 
ce qui modifie la valeur de largeur (et ce n'est pas ce qu'on veut ici)
 
de plus, lors d'une comparaison, largeur est décrémenté apres comparaison.
 

Code :
  1. int largeur = 5;
  2. int cinq = 5;
  3. if(cinq == largeur--)
  4.   System.out.println("ooops" );

Reply

Marsh Posté le 16-02-2004 à 15:48:01    

Je veux dire en cas général quoi "variable-1" c'est pas pareil que "variable--" ??

Reply

Marsh Posté le 16-02-2004 à 15:48:58    

Ah ok merci :)

Reply

Marsh Posté le 16-02-2004 à 16:39:58    

Revois ta théorie, c'est vrai que ton code est  :heink:

Reply

Marsh Posté le 16-02-2004 à 16:42:44    

Qui ça moi ?

Reply

Marsh Posté le 16-02-2004 à 17:12:48    

burnedsoul a écrit :

Je veux dire en cas général quoi "variable-1" c'est pas pareil que "variable--" ??


 

Code :
  1. variable--

et

Code :
  1. variable = variable -1

décrémentent "variable"
 
ce qui n'est pas le cas de

Code :
  1. variable - 1


 
 ;)

Reply

Marsh Posté le 16-02-2004 à 17:20:12    

Oki je vois "l'erreur" :)  
merci

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed