Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1177 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°643716
perchut2
Hell, it's about time...
Posté le 16-02-2004 à 13:08:26  profilanswer
 

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. }

mood
Publicité
Posté le 16-02-2004 à 13:08:26  profilanswer
 

n°643738
benou
Posté le 16-02-2004 à 13:24:00  profilanswer
 

[: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
n°643741
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 16-02-2004 à 13:24:45  profilanswer
 

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.
n°643743
R3g
fonctionnaire certifié ITIL
Posté le 16-02-2004 à 13:25:45  profilanswer
 

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.
n°643744
uriel
blood pt.2
Posté le 16-02-2004 à 13:25:46  profilanswer
 

[: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
n°643746
kadreg
profil: Utilisateur
Posté le 16-02-2004 à 13:26:15  profilanswer
 

Pierre Tramo :love:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°643747
perchut2
Hell, it's about time...
Posté le 16-02-2004 à 13:26:16  profilanswer
 


 
 [: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 :)

n°643752
Jubijub
Parce que je le VD bien
Posté le 16-02-2004 à 13:28:55  profilanswer
 

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
n°643761
R3g
fonctionnaire certifié ITIL
Posté le 16-02-2004 à 13:32:13  profilanswer
 

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.
n°643801
perchut2
Hell, it's about time...
Posté le 16-02-2004 à 13:44:59  profilanswer
 

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

mood
Publicité
Posté le 16-02-2004 à 13:44:59  profilanswer
 

n°643823
LAs3R
Posté le 16-02-2004 à 13:51:29  profilanswer
 

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
n°643830
perchut2
Hell, it's about time...
Posté le 16-02-2004 à 13:53:25  profilanswer
 

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();

n°643840
Jubijub
Parce que je le VD bien
Posté le 16-02-2004 à 13:59:49  profilanswer
 

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
n°643870
R3g
fonctionnaire certifié ITIL
Posté le 16-02-2004 à 14:24:41  profilanswer
 

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.
n°643941
benou
Posté le 16-02-2004 à 15:20:38  profilanswer
 

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
n°643945
perchut2
Hell, it's about time...
Posté le 16-02-2004 à 15:25:07  profilanswer
 

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

n°643970
burnedsoul
Posté le 16-02-2004 à 15:35:55  profilanswer
 

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 ^^

n°643974
perchut2
Hell, it's about time...
Posté le 16-02-2004 à 15:37:18  profilanswer
 

yep :)

n°643976
lorill
Posté le 16-02-2004 à 15:37:35  profilanswer
 

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:

n°643977
burnedsoul
Posté le 16-02-2004 à 15:37:51  profilanswer
 

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

n°643988
benou
Posté le 16-02-2004 à 15:42:16  profilanswer
 

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
n°643996
burnedsoul
Posté le 16-02-2004 à 15:43:44  profilanswer
 

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

n°643998
burnedsoul
Posté le 16-02-2004 à 15:44:18  profilanswer
 

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

n°643999
lorill
Posté le 16-02-2004 à 15:44:37  profilanswer
 

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

n°644000
uriel
blood pt.2
Posté le 16-02-2004 à 15:44:44  profilanswer
 

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
n°644003
lorill
Posté le 16-02-2004 à 15:46:47  profilanswer
 

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" );

n°644004
burnedsoul
Posté le 16-02-2004 à 15:48:01  profilanswer
 

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

n°644005
burnedsoul
Posté le 16-02-2004 à 15:48:58  profilanswer
 

Ah ok merci :)

n°644113
WhatDe
Posté le 16-02-2004 à 16:39:58  profilanswer
 

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

n°644119
burnedsoul
Posté le 16-02-2004 à 16:42:44  profilanswer
 

Qui ça moi ?

n°644191
LAs3R
Posté le 16-02-2004 à 17:12:48  profilanswer
 

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


 
 ;)

n°644213
burnedsoul
Posté le 16-02-2004 à 17:20:12  profilanswer
 

Oki je vois "l'erreur" :)  
merci

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
lien affichant une page au sain d'un tableauJ'arrive pas à lancer des applet SWING !!!!
Tableau a 2 dimensions.[PHP] Classer un tableau de résultats par ordre décroissant
[ASP.Net] Comment remplir une textBox de facon dynamique ?comment appliquer une fonction à toutes les valeurs d'un tableau mix ?
FPDF : je n'arrive pas à afficher le résultat de ma requête [résolu]mon tableau 2d
[C newbie] Comment convertir un tableau de binaire en caractère ?PB Aligner en haut un tableau
Plus de sujets relatifs à : N00b : je n'arrive pas à remplir mon tableau :/


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR